using Core.DomainObjects; using Core.Enumerations; using DataProviders; using DomainResults.Common; using WeatherForecast.Models.Requests; using WeatherForecast.Models.Responses; namespace WeatherForecast.Services { /// /// /// public interface IBlogItemService { /// /// /// /// /// /// (Guid?, IDomainResult) Post(Guid siteId, PostBlogItemRequestModel requestModel); /// /// /// /// /// /// (GetBlogItemResponseModel?, IDomainResult) Get(Guid siteId, Guid blogId); /// /// /// /// /// /// (GetBlogItemResponseModel?, IDomainResult) GetSlug(Guid siteId, string slug); /// /// /// /// /// /// /// (Guid?, IDomainResult) Update(Guid siteId, Guid blogId, PutBlogItemRequestModel requestData); /// /// /// /// /// /// IDomainResult Delete(Guid siteId, Guid blogId); } /// /// /// public class BlogItemService : IBlogItemService { private readonly ILogger _logger; private readonly IBlogCatalogDataProvider _blogCatalogDataProvider; private readonly ICategoryDataProvider _categoryDataProvider; /// /// /// /// /// /// public BlogItemService( ILogger logger, IBlogCatalogDataProvider blogCatalogDataProvider, ICategoryDataProvider categoryDataProvider ) { _logger = logger; _blogCatalogDataProvider = blogCatalogDataProvider; _categoryDataProvider = categoryDataProvider; } /// /// /// /// /// /// /// public (Guid?, IDomainResult) Post(Guid siteId, PostBlogItemRequestModel requestModel) { throw new NotImplementedException(); } /// /// /// /// /// /// public (GetBlogItemResponseModel?, IDomainResult) Get(Guid siteId, Guid blogId) { var (item, result) = _blogCatalogDataProvider.Get(siteId, blogId); if (!result.IsSuccess || item == null) return (null, result); var categories = new List(); foreach (var catId in item.Categories) { var (category, getCategoryResult) = _categoryDataProvider.Get(siteId, catId); if (!getCategoryResult.IsSuccess || category == null) return (null, getCategoryResult); categories.Add(category); } return IDomainResult.Success(new GetBlogItemResponseModel(item, categories)); } /// /// /// /// /// /// public (GetBlogItemResponseModel?, IDomainResult) GetSlug(Guid siteId, string slug) { var (item, result) = _blogCatalogDataProvider.GetBySlug(siteId, slug); if (!result.IsSuccess || item == null) return (null, result); var locale = item.L10n.SingleOrDefault(x => x.Slug == slug)?.Locale ?? Locales.Us; var categories = new List(); foreach (var catId in item.Categories) { var (category, getCategoryResult) = _categoryDataProvider.Get(siteId, catId); if (!getCategoryResult.IsSuccess || category == null) return (null, getCategoryResult); categories.Add(category); } return IDomainResult.Success(new GetBlogItemResponseModel(item, categories, locale)); } /// /// /// /// /// /// /// /// public (Guid?, IDomainResult) Update(Guid siteId, Guid blogId, PutBlogItemRequestModel requestData) { throw new NotImplementedException(); } /// /// /// /// /// /// /// public IDomainResult Delete(Guid siteId, Guid blogId) { throw new NotImplementedException(); } } }