using DomainResults.Common; using DataProviders; using Core.Abstractions; using Core.DomainObjects; using Core.Enumerations; using WeatherForecast.Models.Responses; namespace WeatherForecast.Services { /// /// /// public interface IBlogItemsService { /// /// /// /// /// /// /// /// /// /// (BlogItemsResponseModel?, IDomainResult) Get(Guid siteId, Guid? category, int currentPage, int itemsPerPage, string? locale, string? searchText); /// /// /// /// /// IDomainResult Delete(Guid siteId); } /// /// /// public class BlogItemsService : IBlogItemsService { private readonly ILogger _logger; private readonly IBlogCatalogDataProvider _blogCatalogDataProvider; private readonly ICategoryDataProvider _categoryDataProvider; /// /// /// /// /// /// public BlogItemsService( ILogger logger, IBlogCatalogDataProvider blogCatalogDataProvider, ICategoryDataProvider categoryDataProvider ) { _logger = logger; _blogCatalogDataProvider = blogCatalogDataProvider; _categoryDataProvider = categoryDataProvider; } /// /// /// /// /// /// /// /// /// /// public (BlogItemsResponseModel?, IDomainResult) Get(Guid siteId, Guid? category, int currentPage, int itemsPerPage, string? locale, string? searchText) { try { var (items, result) = _blogCatalogDataProvider.GetAll(siteId, currentPage > 0 ? ((currentPage - 1) * itemsPerPage) : 0, itemsPerPage); if (!result.IsSuccess || items == null) return (null, result); var blogItems = new List(); foreach (var item in items) { var categories = new List(); if (item.Categories != null) { foreach (var catId in item.Categories) { var (cat, getCategoryResult) = _categoryDataProvider.Get(siteId, catId); if (!getCategoryResult.IsSuccess || cat == null) return (null, getCategoryResult); categories.Add(cat); } } if (locale != null) blogItems.Add(new BlogItemResponseModel(item, categories, Enumeration.FromDisplayName(locale) ?? Locales.Us)); else blogItems.Add(new BlogItemResponseModel(item, categories)); } return blogItems.Count > 0 ? IDomainResult.Success(new BlogItemsResponseModel(currentPage, 0, blogItems)) : IDomainResult.NotFound(); } catch (Exception ex) { return IDomainResult.Failed(ex.Message); } } /// /// /// /// /// public IDomainResult Delete(Guid siteId) { try { return _blogCatalogDataProvider.DeleteAll(siteId); } catch (Exception ex) { return IDomainResult.Failed(ex.Message); } } } }