From a9a5082e1a2b7813343c4f0662af92f5cb87f325 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Mon, 4 Aug 2025 22:26:51 +0800 Subject: [PATCH] :sparkles: File update APIs --- DysonNetwork.Drive/Storage/FileController.cs | 49 +++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/DysonNetwork.Drive/Storage/FileController.cs b/DysonNetwork.Drive/Storage/FileController.cs index e889361..9e72192 100644 --- a/DysonNetwork.Drive/Storage/FileController.cs +++ b/DysonNetwork.Drive/Storage/FileController.cs @@ -1,6 +1,6 @@ using DysonNetwork.Shared.Auth; +using DysonNetwork.Shared.Data; using DysonNetwork.Shared.Proto; -using Grpc.Core; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; @@ -141,6 +141,53 @@ public class FileController( return file; } + [Authorize] + [HttpPatch("{id}/name")] + public async Task> UpdateFileName(string id, [FromBody] string name) + { + if (HttpContext.Items["CurrentUser"] is not Account currentUser) return Unauthorized(); + var accountId = Guid.Parse(currentUser.Id); + var file = await db.Files.FirstOrDefaultAsync(f => f.Id == id && f.AccountId == accountId); + if (file is null) return NotFound(); + file.Name = name; + await db.SaveChangesAsync(); + await fs._PurgeCacheAsync(file.Id); + return file; + } + + public class MarkFileRequest + { + public List? SensitiveMarks { get; set; } + } + + [Authorize] + [HttpPut("{id}/marks")] + public async Task> MarkFile(string id, [FromBody] MarkFileRequest request) + { + if (HttpContext.Items["CurrentUser"] is not Account currentUser) return Unauthorized(); + var accountId = Guid.Parse(currentUser.Id); + var file = await db.Files.FirstOrDefaultAsync(f => f.Id == id && f.AccountId == accountId); + if (file is null) return NotFound(); + file.SensitiveMarks = request.SensitiveMarks; + await db.SaveChangesAsync(); + await fs._PurgeCacheAsync(file.Id); + return file; + } + + [Authorize] + [HttpPut("{id}/meta")] + public async Task> UpdateFileMeta(string id, [FromBody] Dictionary meta) + { + if (HttpContext.Items["CurrentUser"] is not Account currentUser) return Unauthorized(); + var accountId = Guid.Parse(currentUser.Id); + var file = await db.Files.FirstOrDefaultAsync(f => f.Id == id && f.AccountId == accountId); + if (file is null) return NotFound(); + file.UserMeta = meta; + await db.SaveChangesAsync(); + await fs._PurgeCacheAsync(file.Id); + return file; + } + [Authorize] [HttpGet("me")] public async Task>> GetMyFiles(