using System;
using System.ComponentModel.DataAnnotations;
using AutoMapper;
using Dpz.Core.Entity.Base.MapperConfig;
using Dpz.Core.EnumLibrary;
using Dpz.Core.Public.Entity;
namespace Dpz.Core.Public.ViewModel;
public class MembleComment : IHaveCustomMapping
{
/// <summary>
/// 评论类型
/// </summary>
[Required(ErrorMessage = "comment node is empty.")]
public required CommentNode Node { get; set; }
/// <summary>
/// 关联
/// </summary>
[
Required(ErrorMessage = "relation is empty."),
MaxLength(500, ErrorMessage = "relation max length 20.")
]
public required string Relation { get; set; }
/// <summary>
/// 回复内容
/// </summary>
[
Required(ErrorMessage = "请输入回复内容"),
MaxLength(2000, ErrorMessage = "回复内容最大长度为2000")
]
public required string CommentText { get; set; }
/// <summary>
/// 回复ID
/// </summary>
[MaxLength(50, ErrorMessage = "reply id max length 15")]
public string? ReplyId { get; set; }
public VmUserInfo? User { get; set; }
public static void CreateMappings(MapperConfigurationExpression cfg)
{
cfg.CreateMap<MembleComment, Comment>()
.ConstructUsing(
(viewModel, _) =>
{
var entity = new Comment
{
Node = viewModel.Node,
Relation = viewModel.Relation,
CommentText = viewModel.CommentText,
Commenter = new MembleCommenter()
{
Avatar =
viewModel.User?.Avatar
?? throw new ArgumentNullException(nameof(viewModel.User)),
Identity =
viewModel.User?.Permissions?.HasFlag(Permissions.System) == true
? "管理员"
: "成员",
NickName =
viewModel.User?.Name
?? throw new ArgumentNullException(nameof(viewModel.User)),
},
};
return entity;
}
);
}
}
⚠⚠ 以下内容为AI分析的结果,请根据实际情况进行判断。
这段代码定义了一个名为 MembleComment 的类,它实现了 IHaveCustomMapping 接口,并使用了 AutoMapper 库来进行对象映射。以下是对代码的详细解释:
类的定义
- 命名空间:
Dpz.Core.Public.ViewModel,表示该类属于公共视图模型部分。 - 类名:
MembleComment,表示这是一个与评论相关的视图模型。
属性
Node:
- 类型:
CommentNode - 特性:
[Required],表示该属性是必需的,且如果为空会返回错误信息 "comment node is empty."。 - 功能: 表示评论的类型。
- 类型:
Relation:
- 类型:
string - 特性:
[Required]和[MaxLength(500)],表示该属性是必需的,且最大长度为500个字符。 - 功能: 表示与评论相关的内容或对象。
- 类型:
CommentText:
- 类型:
string - 特性:
[Required]和[MaxLength(2000)],表示该属性是必需的,且最大长度为2000个字符。 - 功能: 表示评论的具体内容。
- 类型:
ReplyId:
- 类型:
string?(可空类型) - 特性:
[MaxLength(50)],表示最大长度为50个字符。 - 功能: 表示回复的ID,如果该评论是对其他评论的回复。
- 类型:
User:
- 类型:
VmUserInfo?(可空类型) - 功能: 表示评论者的用户信息。
- 类型:
方法
- CreateMappings:
- 参数:
MapperConfigurationExpression cfg,用于配置映射。 - 功能: 使用 AutoMapper 创建从
MembleComment到Comment的映射。 - 映射逻辑:
- 创建一个新的
Comment实体,并将MembleComment的属性映射到Comment的相应属性。 Commenter属性被初始化为MembleCommenter对象,其中包含评论者的头像、身份(管理员或成员)和昵称。
- 创建一个新的
- 参数:
总结
整体来看,MembleComment 类用于表示一个评论的视图模型,包含了评论的基本信息和评论者的信息。通过实现 IHaveCustomMapping 接口,类能够与 AutoMapper 配合使用,将视图模型转换为数据实体(Comment)。这使得在处理评论时,可以方便地将用户输入的数据映射到后端的数据结构中。
评论加载中...