reactredux/src/WeatherForecast/Models/Blog/Responses/GetBlogItemSlugResponseModel.cs

246 lines
5.5 KiB
C#

using Core.Enumerations;
using Core.Abstractions.Models;
using DomainObjects;
using DomainObjects.Enumerations;
using DomainObjects.Documents.Posts;
using DomainObjects.Documents.Users;
using DomainObjects.Documents.Categories;
namespace WeatherForecast.Models.Blog.Responses {
#region Media attachment
/// <summary>
///
/// </summary>
public class GetBlogItemSlugMediaAttachmentResponseModel {
/// <summary>
///
/// </summary>
public string Src { get; set; }
/// <summary>
///
/// </summary>
public MediaTypes MediaType { get; set; }
/// <summary>
///
/// </summary>
public string? Alt { get; set; }
/// <summary>
///
/// </summary>
public string? Target { get; set; }
/// <summary>
///
/// </summary>
public string? Title { get; set; }
/// <summary>
///
/// </summary>
public string? Description { get; set; }
/// <summary>
///
/// </summary>
/// <param name="mediaAttachment"></param>
/// <param name="locale"></param>
public GetBlogItemSlugMediaAttachmentResponseModel(MediaAttachment mediaAttachment, Locales locale) {
var l10n = mediaAttachment.L10n.Single(x => x.Locale == locale);
Src = mediaAttachment.Src;
MediaType = mediaAttachment.MediaType;
Alt = l10n.Alt;
Target = l10n.Target;
Title = l10n.Title;
Description = l10n.Description;
}
}
#endregion
#region Author
/// <summary>
///
/// </summary>
public class GetBlogItemSlugAuthorModel : ResponseModelBase {
/// <summary>
///
/// </summary>
public GetBlogItemSlugMediaAttachmentResponseModel? Avatar { get; set; }
/// <summary>
///
/// </summary>
public string NickName { get; set; }
/// <summary>
///
/// </summary>
/// <param name="author"></param>
/// <param name="locale"></param>
public GetBlogItemSlugAuthorModel(User author, Locales locale) {
if(author.Avatar != null)
Avatar = new GetBlogItemSlugMediaAttachmentResponseModel(author.Avatar, locale);
NickName = author.Username;
}
}
#endregion
#region Category
/// <summary>
///
/// </summary>
public class GetBlogItemSlugCategoryResponseModel : ResponseModelBase {
/// <summary>
///
/// </summary>
public string Slug { get; set; }
/// <summary>
///
/// </summary>
public string Text { get; set; }
/// <summary>
///
/// </summary>
/// <param name="category"></param>
/// <param name="locale"></param>
public GetBlogItemSlugCategoryResponseModel(Category category, Locales locale) {
var l10n = category.L10n.Single(x => x.Locale == locale);
Slug = l10n.Slug;
Text = l10n.Text;
}
}
#endregion
#region Blog item
/// <summary>
///
/// </summary>
public class GetBlogItemSlugResponseModel : ResponseModelBase {
/// <summary>
///
/// </summary>
public string? Slug { get; set; }
/// <summary>
///
/// </summary>
public string? Description { get; set; }
/// <summary>
///
/// </summary>
public string? Title { get; set; }
/// <summary>
///
/// </summary>
public string? ShortText { get; set; }
/// <summary>
///
/// </summary>
public string? Text { get; set; }
/// <summary>
///
/// </summary>
public string? PlainText { get; set; }
/// <summary>
///
/// </summary>
public string? ContentType { get; set; }
/// <summary>
///
/// </summary>
public List<string>? Badges { get; set; }
/// <summary>
///
/// </summary>
public List<GetBlogItemSlugMediaAttachmentResponseModel>? MediaAttachemnts { get; set; }
/// <summary>
///
/// </summary>
public GetBlogItemSlugAuthorModel? Author { get; set; }
/// <summary>
///
/// </summary>
public DateTime Created { get; set; }
/// <summary>
///
/// </summary>
public List<string>? Tags { get; set; }
/// <summary>
///
/// </summary>
public List<GetBlogItemSlugCategoryResponseModel> Categories { get; set; }
/// <summary>
///
/// </summary>
public bool? FamilyFriendly { get; set; }
/// <summary>
///
/// </summary>
public uint? ReadTime { get; set; }
/// <summary>
///
/// </summary>
public uint? Likes { get; set; }
/// <summary>
///
/// </summary>
/// <param name="blogItem"></param>
/// <param name="categories"></param>
/// <param name="author"></param>
/// <param name="locale"></param>
public GetBlogItemSlugResponseModel(BlogDocument blogItem, List<Category> categories, User author, Locales locale) {
var postItemL10n = blogItem.L10n.Single(x => x.Locale == locale);
Slug = postItemL10n.Slug;
Badges = postItemL10n.Badges;
Title = postItemL10n.Title;
ShortText = postItemL10n.ShortText;
Text = postItemL10n.Text;
PlainText = postItemL10n.PlainText;
Badges = postItemL10n.Badges;
Created = blogItem.Created;
Tags = blogItem.Tags;
Categories = categories.Select(x => new GetBlogItemSlugCategoryResponseModel(x, locale)).ToList();
MediaAttachemnts = blogItem.MediaAttachments?.Select(x => new GetBlogItemSlugMediaAttachmentResponseModel(x, locale)).ToList();
Author = new GetBlogItemSlugAuthorModel(author, locale);
ReadTime = blogItem.ReadTime;
Likes = blogItem.Likes;
}
}
#endregion
}