using DataProviders; using DataProviders.Buckets; using DataProviders.Collections; using DomainResults.Common; using ImageProvider; using ImageProvider.Fonts; namespace WeatherForecast.Services { /// /// /// public interface IImageService { /// /// /// /// /// /// /// /// (BucketFile?, IDomainResult) Get(Guid siteId, int width, int height, Guid imageId); } /// /// /// public class ImageService : IImageService { private readonly ILogger _logger; private readonly IImageBucketDataProvider _imageBucketDataProvider; private readonly IImageProvider _imageProvider; private readonly IContentDataProvider _contentDataProvider; /// /// /// /// /// /// public ImageService( ILogger logger, IImageBucketDataProvider imageBucketDataProvider, IImageProvider imageProvider, IContentDataProvider contentDataProvider ) { _logger = logger; _imageBucketDataProvider = imageBucketDataProvider; _imageProvider = imageProvider; _contentDataProvider = contentDataProvider; } /// /// /// /// /// /// /// /// public (BucketFile?, IDomainResult) Get(Guid siteId, int width, int height, Guid imageId) { try { var (file, downloadResult) = _imageBucketDataProvider.Download(siteId, imageId); if (!downloadResult.IsSuccess || file == null) return IDomainResult.Failed (); var (content, getContentResult) = _contentDataProvider.Get(siteId); if (!getContentResult.IsSuccess || content == null) return IDomainResult.Failed(); var (image, transformResult) = _imageProvider.ResizeAndWatermark(file.Bytes, width, height, FontsEnum.Montserrat, FontStylesEnum.Regular, content.First().SiteName); if (!transformResult.IsSuccess || image == null) return IDomainResult.Failed(); return IDomainResult.Success(new BucketFile(file.Name, image, "image/jpeg")); } catch (Exception ex) { _logger.LogError(ex, "Unhandled exception"); return IDomainResult.Failed (ex.Message); } } } }