using FileShare_Common.Core; using FileShare_Services.Core; namespace FileShare_Services.Services.FileLibrary { public sealed class FileLibraryEndpointService(IFileLibraryService fileLibrary) : IFileLibraryEndpointService { public async Task GetDrivesAsync(ServiceEndpointContext ctx) { return ResponseHelper.Ok(await fileLibrary.GetDrivesAsync()); } public async Task GetDirectoriesAsync(DirectoryQueryRequest request) { return ResponseHelper.Ok(await fileLibrary.GetDirectoriesAsync(request.Path)); } public async Task GetRootsAsync(ServiceEndpointContext ctx) { return ResponseHelper.Ok(await fileLibrary.GetRootsAsync()); } public async Task AddRootAsync(AddLibraryRootRequest request) { return ResponseHelper.Ok(await fileLibrary.AddRootAsync(request), "文件库目录已添加并完成扫描。"); } public async Task SetRootEnabledAsync(UpdateLibraryRootRequest request) { return ResponseHelper.Ok(await fileLibrary.SetRootEnabledAsync(request), "文件库目录状态已更新。"); } public async Task DeleteRootAsync(DeleteLibraryRootRequest request) { await fileLibrary.DeleteRootAsync(request); return ResponseHelper.Succeed("文件库目录已删除。"); } public async Task ScanRootAsync(ScanLibraryRootRequest request) { return ResponseHelper.Ok(await fileLibrary.ScanRootAsync(request.Id), "文件库目录扫描完成。"); } public async Task SearchFilesAsync(SearchFilesRequest request) { return await fileLibrary.SearchFilesAsync(request); } public async Task GetFileAsync(FileQueryRequest request) { ValidateFileId(request.Id); var file = await fileLibrary.GetFileAsync(request.Id); return file is null ? ResponseHelper.Failure(404, "文件不存在或尚未扫描入库。") : ResponseHelper.Ok(file); } public async Task GetTextPreviewAsync(FileQueryRequest request) { ValidateFileId(request.Id); var preview = await fileLibrary.GetTextPreviewAsync(request.Id); return preview is null ? ResponseHelper.Failure(404, "文本文件不存在或无法预览。") : ResponseHelper.Ok(preview); } public async Task BrowseDirectoryAsync(BrowseDirectoryRequest request) { if (request.RootId <= 0) return ResponseHelper.Failure(400, "rootId 参数无效。"); var result = await fileLibrary.BrowseDirectoryAsync(request); return ResponseHelper.Ok(result); } private static void ValidateFileId(int id) { if (id > 0) { return; } throw new ArgumentException("id 参数无效。"); } } }