71 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using DysonNetwork.Shared.Models;
 | 
						|
using DysonNetwork.Shared.Proto;
 | 
						|
using Google.Protobuf.WellKnownTypes;
 | 
						|
using Grpc.Core;
 | 
						|
 | 
						|
namespace DysonNetwork.Drive.Storage
 | 
						|
{
 | 
						|
    public class FileServiceGrpc(FileService fileService) : Shared.Proto.FileService.FileServiceBase
 | 
						|
    {
 | 
						|
        public override async Task<Shared.Proto.CloudFile> GetFile(GetFileRequest request, ServerCallContext context)
 | 
						|
        {
 | 
						|
            var file = await fileService.GetFileAsync(request.Id);
 | 
						|
            return file?.ToProtoValue() ?? throw new RpcException(new Status(StatusCode.NotFound, "File not found"));
 | 
						|
        }
 | 
						|
 | 
						|
        public override async Task<GetFileBatchResponse> GetFileBatch(GetFileBatchRequest request, ServerCallContext context)
 | 
						|
        {
 | 
						|
            var files = await fileService.GetFilesAsync(request.Ids.ToList());
 | 
						|
            return new GetFileBatchResponse { Files = { files.Select(f => f.ToProtoValue()) } };
 | 
						|
        }
 | 
						|
 | 
						|
        public override async Task<Shared.Proto.CloudFile> UpdateFile(UpdateFileRequest request,
 | 
						|
            ServerCallContext context)
 | 
						|
        {
 | 
						|
            var file = await fileService.GetFileAsync(request.File.Id);
 | 
						|
            if (file == null)
 | 
						|
                throw new RpcException(new Status(StatusCode.NotFound, "File not found"));
 | 
						|
            var updatedFile = await fileService.UpdateFileAsync(file, request.UpdateMask);
 | 
						|
            return updatedFile.ToProtoValue();
 | 
						|
        }
 | 
						|
 | 
						|
        public override async Task<Empty> DeleteFile(DeleteFileRequest request, ServerCallContext context)
 | 
						|
        {
 | 
						|
            var file = await fileService.GetFileAsync(request.Id);
 | 
						|
            if (file == null)
 | 
						|
            {
 | 
						|
                throw new RpcException(new Status(StatusCode.NotFound, "File not found"));
 | 
						|
            }
 | 
						|
 | 
						|
            await fileService.DeleteFileAsync(file);
 | 
						|
            return new Empty();
 | 
						|
        }
 | 
						|
 | 
						|
        public override async Task<LoadFromReferenceResponse> LoadFromReference(
 | 
						|
            LoadFromReferenceRequest request,
 | 
						|
            ServerCallContext context
 | 
						|
        )
 | 
						|
        {
 | 
						|
            // Assuming CloudFileReferenceObject is a simple class/struct that holds an ID
 | 
						|
            // You might need to define this or adjust the LoadFromReference method in FileService
 | 
						|
            var references = request.ReferenceIds.Select(id => new SnCloudFileReferenceObject { Id = id }).ToList();
 | 
						|
            var files = await fileService.LoadFromReference(references);
 | 
						|
            var response = new LoadFromReferenceResponse();
 | 
						|
            response.Files.AddRange(files.Where(f => f != null).Select(f => f!.ToProtoValue()));
 | 
						|
            return response;
 | 
						|
        }
 | 
						|
 | 
						|
        public override async Task<IsReferencedResponse> IsReferenced(IsReferencedRequest request,
 | 
						|
            ServerCallContext context)
 | 
						|
        {
 | 
						|
            var isReferenced = await fileService.IsReferencedAsync(request.FileId);
 | 
						|
            return new IsReferencedResponse { IsReferenced = isReferenced };
 | 
						|
        }
 | 
						|
 | 
						|
        public override async Task<Empty> PurgeCache(PurgeCacheRequest request, ServerCallContext context)
 | 
						|
        {
 | 
						|
            await fileService._PurgeCacheAsync(request.FileId);
 | 
						|
            return new Empty();
 | 
						|
        }
 | 
						|
    }
 | 
						|
} |