using System;
using System.Collections.Generic;
using System.Linq;
using AutoMapper;
using Dpz.Core.EnumLibrary;
using Dpz.Core.Infrastructure;
using Dpz.Core.Public.Entity;
namespace Dpz.Core.Public.ViewModel;
public class VmCommentFlat : IHaveCustomMapping
{
public string Id { get; set; }
/// <summary>
/// 评论类型
/// </summary>
public CommentNode Node { get; set; }
/// <summary>
/// 关联
/// </summary>
public string Relation { get; set; }
/// <summary>
/// 回复时间
/// </summary>
public DateTime PublishTime { get; set; }
/// <summary>
/// 回复内容
/// </summary>
public string CommentText { get; set; }
/// <summary>
/// 回复ID
/// </summary>
public List<string> Replies { get; set; }
/// <summary>
/// 昵称
/// </summary>
public string NickName { get; set; }
/// <summary>
/// 头像
/// </summary>
public string Avatar { get; set; }
/// <summary>
/// 身份标识
/// </summary>
public string Identity { get; set; }
/// <summary>
/// 邮箱
/// </summary>
public string Email { get; set; }
/// <summary>
/// 网站
/// </summary>
public string Site { get; set; }
/// <summary>
/// 是否匿名评论
/// </summary>
public bool IsGuest { get; set; }
/// <summary>
/// 是否删除
/// </summary>
public bool? IsDelete { get; set; }
public void CreateMappings(MapperConfigurationExpression cfg)
{
cfg.CreateMap<Comment, VmCommentFlat>().ConvertUsing((entity, _) =>
{
var viewModel = new VmCommentFlat
{
Id = entity.Id.ToString(),
Node = entity.Node,
Relation = entity.Relation,
PublishTime = entity.PublishTime.ToLocalTime(),
CommentText = entity.CommentText,
Replies = entity.Replies == null
? new List<string>()
: entity.Replies.Select(x => x.ToString()).ToList(),
NickName = entity.Commenter.NickName,
IsDelete = entity.IsDelete
};
if (entity.Commenter is GuestCommenter guestCommenter)
{
viewModel.IsGuest = true;
viewModel.Email = guestCommenter.Email;
viewModel.Site = guestCommenter.Site;
}
else if (entity.Commenter is MembleCommenter membleCommenter)
{
viewModel.IsGuest = false;
viewModel.Identity = membleCommenter.Identity;
viewModel.Avatar = membleCommenter.Avatar;
}
return viewModel;
});
}
}