reactredux/webapi/WeatherForecast/Services/BlogItemService.cs

82 lines
2.9 KiB
C#

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<BlogItemService> _logger;
private readonly IBlogCatalogDataProvider _blogCatalogDataProvider;
private readonly ICategoryDataProvider _categoryDataProvider;
public BlogItemService(
ILogger<BlogItemService> 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<Category>();
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<Category>();
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();
}
}
}