using FileService.Application.Ports; using FileService.Application.StorageContracts; using FileService.Domain.ValueObjects; using IM.Commons; using IM.InitCommon; using MassTransit; using MassTransit.Configuration; using Microsoft.Extensions.Options; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FileService.Infrastructure.Storage { public class LocalStorageAdapter(IRedisService redis, IOptions options) : IObjectStoragePort { private readonly IRedisService redis = redis; private readonly IOptions options = options; public string ProviderCode => "Local"; public Task CompleteUploadAsync(CompleteUploadCommand command, CancellationToken token) { throw new NotImplementedException(); } public async Task GenerateUploadUrlAsync(GenerateUploadUrlCommand command, CancellationToken token) { var baseUrl = options.Value.Providers[options.Value.DefaultProviderCode].LocalUploadApiBaseUrl; return new PresignedUrl( baseUrl + $"?partNumber={command.PartNumber}", new Dictionary(), ExpiresAt: DateTimeOffset.Now.Add(options.Value.Providers[options.Value.DefaultProviderCode].UploadUrlExpiresIn) ); } public async Task InitUploadAsync(InitiateUploadCommand command, CancellationToken token) { var sessionId = Guid.NewGuid(); var location = new StorageLocation(); return new InitiateUploadResult(sessionId.ToString(),location); } } }