using DomainResults.Common; using DataProviders.Collections; using Core.Abstractions; using WeatherForecast.Models.Cetegories.Responses; using WeatherForecast.Models.Cetegories.Requests; namespace WeatherForecast.Services { /// /// /// public interface ICategoryItemsService { /// /// /// /// /// /// (GetCategoryItemsLocalizedResponseModel?, IDomainResult) Get(Guid siteId, GetCategoryItemsLocalizedRequestModel requestData); } /// /// /// public class CategoryItemsService : ServiceBase, ICategoryItemsService { private readonly ICategoryDataProvider _categoryDataProvider; /// /// /// /// /// public CategoryItemsService( ILogger logger, ICategoryDataProvider categoryDataProvider ) : base(logger) { _categoryDataProvider = categoryDataProvider; } /// /// /// /// /// /// public (GetCategoryItemsLocalizedResponseModel?, IDomainResult) Get(Guid siteId, GetCategoryItemsLocalizedRequestModel requestData) { var (count, getCountResult) = _categoryDataProvider.Count(siteId); if (!getCountResult.IsSuccess || count == null) return (null, getCountResult); var skip = (requestData.CurrentPage - 1) * requestData.ItemsPerPage; var take = requestData.ItemsPerPage; var totalPages = (int)Math.Ceiling((decimal)count / take); var (items, result) = _categoryDataProvider.GetAll(siteId); if (!result.IsSuccess || items == null) return (null, result); return IDomainResult.Success(new GetCategoryItemsLocalizedResponseModel(requestData.CurrentPage, totalPages, items.Select(x => new GetCategoryItemLocalizedResponseModel(x, requestData.Locale)).ToList())); } } }