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) Get(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 ) { _logger = logger; _blogCatalogDataProvider = blogCatalogDataProvider; } 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(catId, siteId); if (!getCategoryResult.IsSuccess || category == null) return (null, getCategoryResult); categories.Add(category); } return IDomainResult.Success(new GetBlogItemResponseModel(item, categories, Locales.Us)); } public (GetBlogItemResponseModel?, IDomainResult) Get(Guid siteId, string slug) { var (item, result) = _blogCatalogDataProvider.Get(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(catId, siteId); 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(); } } }