reactredux/webapi/WeatherForecast/Services/BlogItemService.cs

165 lines
5.0 KiB
C#

using Core.DomainObjects;
using Core.Enumerations;
using DataProviders;
using DomainResults.Common;
using WeatherForecast.Models.Requests;
using WeatherForecast.Models.Responses;
namespace WeatherForecast.Services {
/// <summary>
///
/// </summary>
public interface IBlogItemService {
/// <summary>
///
/// </summary>
/// <param name="siteId"></param>
/// <param name="requestModel"></param>
/// <returns></returns>
(Guid?, IDomainResult) Post(Guid siteId, PostBlogItemRequestModel requestModel);
/// <summary>
///
/// </summary>
/// <param name="siteId"></param>
/// <param name="blogId"></param>
/// <returns></returns>
(GetBlogItemResponseModel?, IDomainResult) Get(Guid siteId, Guid blogId);
/// <summary>
///
/// </summary>
/// <param name="siteId"></param>
/// <param name="slug"></param>
/// <returns></returns>
(GetBlogItemResponseModel?, IDomainResult) GetSlug(Guid siteId, string slug);
/// <summary>
///
/// </summary>
/// <param name="siteId"></param>
/// <param name="blogId"></param>
/// <param name="requestData"></param>
/// <returns></returns>
(Guid?, IDomainResult) Update(Guid siteId, Guid blogId, PutBlogItemRequestModel requestData);
/// <summary>
///
/// </summary>
/// <param name="siteId"></param>
/// <param name="blogId"></param>
/// <returns></returns>
IDomainResult Delete(Guid siteId, Guid blogId);
}
/// <summary>
///
/// </summary>
public class BlogItemService : IBlogItemService {
private readonly ILogger<BlogItemService> _logger;
private readonly IBlogCatalogDataProvider _blogCatalogDataProvider;
private readonly ICategoryDataProvider _categoryDataProvider;
/// <summary>
///
/// </summary>
/// <param name="logger"></param>
/// <param name="blogCatalogDataProvider"></param>
/// <param name="categoryDataProvider"></param>
public BlogItemService(
ILogger<BlogItemService> logger,
IBlogCatalogDataProvider blogCatalogDataProvider,
ICategoryDataProvider categoryDataProvider
) {
_logger = logger;
_blogCatalogDataProvider = blogCatalogDataProvider;
_categoryDataProvider = categoryDataProvider;
}
/// <summary>
///
/// </summary>
/// <param name="siteId"></param>
/// <param name="requestModel"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public (Guid?, IDomainResult) Post(Guid siteId, PostBlogItemRequestModel requestModel) {
throw new NotImplementedException();
}
/// <summary>
///
/// </summary>
/// <param name="siteId"></param>
/// <param name="blogId"></param>
/// <returns></returns>
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(siteId, catId);
if (!getCategoryResult.IsSuccess || category == null)
return (null, getCategoryResult);
categories.Add(category);
}
return IDomainResult.Success(new GetBlogItemResponseModel(item, categories));
}
/// <summary>
///
/// </summary>
/// <param name="siteId"></param>
/// <param name="slug"></param>
/// <returns></returns>
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<Category>();
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));
}
/// <summary>
///
/// </summary>
/// <param name="siteId"></param>
/// <param name="blogId"></param>
/// <param name="requestData"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public (Guid?, IDomainResult) Update(Guid siteId, Guid blogId, PutBlogItemRequestModel requestData) {
throw new NotImplementedException();
}
/// <summary>
///
/// </summary>
/// <param name="siteId"></param>
/// <param name="blogId"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public IDomainResult Delete(Guid siteId, Guid blogId) {
throw new NotImplementedException();
}
}
}