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);
}
}
}
}