50 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using DysonNetwork.Shared.Models;
 | |
| using DysonNetwork.Shared.Proto;
 | |
| using Microsoft.AspNetCore.Authorization;
 | |
| using Microsoft.AspNetCore.Mvc;
 | |
| using Microsoft.EntityFrameworkCore;
 | |
| 
 | |
| namespace DysonNetwork.Drive.Storage;
 | |
| 
 | |
| [ApiController]
 | |
| [Route("/api/pools")]
 | |
| public class FilePoolController(AppDatabase db, FileService fs) : ControllerBase
 | |
| {
 | |
|     [HttpGet]
 | |
|     [Authorize]
 | |
|     public async Task<ActionResult<List<FilePool>>> ListUsablePools()
 | |
|     {
 | |
|         if (HttpContext.Items["CurrentUser"] is not Account currentUser) return Unauthorized();
 | |
| 
 | |
|         var accountId = Guid.Parse(currentUser.Id);
 | |
|         var pools = await db.Pools
 | |
|             .Where(p => p.PolicyConfig.PublicUsable || p.AccountId == accountId)
 | |
|             .Where(p => !p.IsHidden || p.AccountId == accountId)
 | |
|             .OrderBy(p => p.CreatedAt)
 | |
|             .ToListAsync();
 | |
|         pools = pools.Select(p =>
 | |
|         {
 | |
|             p.StorageConfig.SecretId = string.Empty;
 | |
|             p.StorageConfig.SecretKey = string.Empty;
 | |
|             return p;
 | |
|         }).ToList();
 | |
| 
 | |
|         return Ok(pools);
 | |
|     }
 | |
| 
 | |
|     [Authorize]
 | |
|     [HttpDelete("{id:guid}/recycle")]
 | |
|     public async Task<ActionResult> DeleteFilePoolRecycledFiles(Guid id)
 | |
|     {
 | |
|         if (HttpContext.Items["CurrentUser"] is not Account currentUser) return Unauthorized();
 | |
|         var accountId = Guid.Parse(currentUser.Id);
 | |
| 
 | |
|         var pool = await fs.GetPoolAsync(id);
 | |
|         if (pool is null) return NotFound();
 | |
|         if (!currentUser.IsSuperuser && pool.AccountId != accountId) return Unauthorized();
 | |
| 
 | |
|         var count = await fs.DeletePoolRecycledFilesAsync(id);
 | |
|         return Ok(new { Count = count });
 | |
|     }
 | |
| }
 |