using DataProviders; using DataProviders.Buckets; using DomainResults.Common; namespace WeatherForecast.Services { /// /// /// public interface IFileService { /// /// /// /// /// /// /// (Guid?, IDomainResult) Post(Guid siteId, Guid userId, IFormFile file); /// /// /// /// /// /// /// (BucketFile?, IDomainResult) Get(Guid siteId, Guid userId, Guid fileId); /// /// /// /// /// /// /// IDomainResult Delete(Guid siteId, Guid userId, Guid fileId); } /// /// /// public class FileService : IFileService { private readonly ILogger _logger; private readonly IFilesService _filesService; private readonly IImageBucketDataProvider _imageBucketDataProvider; /// /// /// /// /// /// public FileService( ILogger logger, IFilesService filesService, IImageBucketDataProvider imageBucketDataProvider ) { _logger = logger; _filesService = filesService; _imageBucketDataProvider = imageBucketDataProvider; } /// /// /// /// /// /// /// public (Guid?, IDomainResult) Post(Guid siteId, Guid userId, IFormFile file) { var (list, result) = _filesService.Post(siteId, userId, new List { file }); if (!result.IsSuccess || list == null) return (null, result); return (list.First(), result); } /// /// /// /// /// /// /// public (BucketFile?, IDomainResult) Get(Guid siteId, Guid userId, Guid fileId) { try { var (file, result) = _imageBucketDataProvider.Download(siteId, userId, fileId); if (!result.IsSuccess || file == null) return (null, result); return IDomainResult.Success(file); } catch (Exception ex) { _logger.LogError(ex, "Unhandled exception"); return IDomainResult.Failed(ex.Message); } } /// /// /// /// /// /// /// public IDomainResult Delete(Guid siteId, Guid userId, Guid fileId) { try { return _imageBucketDataProvider.DeleteOne(siteId, userId, fileId); } catch (Exception ex) { _logger.LogError(ex, "Unhandled exception"); return IDomainResult.Failed(ex.Message); } } } }