网站首页 网站源码
website
站点相关全部源代码,隐藏了一些关于服务器的信息
using System.ComponentModel.DataAnnotations;
using AutoMapper;
using Dpz.Core.EnumLibrary;
using Dpz.Core.Infrastructure;
using Dpz.Core.Public.Entity;

#nullable enable

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 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,
                    Identity = viewModel.User?.Permissions?.HasFlag(Permissions.System) == true ? "管理员" : "成员",
                    NickName = viewModel.User?.Name
                },
            };
            return entity;
        });
    }
}
⚠⚠    以下内容为AI分析的结果,请根据实际情况进行判断。

这段代码定义了一个名为 MembleComment 的类,它实现了 IHaveCustomMapping 接口,并使用了 AutoMapper 库来进行对象映射。以下是对代码的详细解释:

类的定义

  • 命名空间: Dpz.Core.Public.ViewModel,表示该类属于公共视图模型部分。
  • 类名: MembleComment,表示这是一个与评论相关的视图模型。

属性

  1. Node:

    • 类型: CommentNode
    • 特性: [Required],表示该属性是必需的,且如果为空会返回错误信息 "comment node is empty."。
    • 功能: 表示评论的类型。
  2. Relation:

    • 类型: string
    • 特性: [Required][MaxLength(500)],表示该属性是必需的,且最大长度为500个字符。
    • 功能: 表示与评论相关的内容或对象。
  3. CommentText:

    • 类型: string
    • 特性: [Required][MaxLength(2000)],表示该属性是必需的,且最大长度为2000个字符。
    • 功能: 表示评论的具体内容。
  4. ReplyId:

    • 类型: string?(可空类型)
    • 特性: [MaxLength(50)],表示最大长度为50个字符。
    • 功能: 表示回复的ID,如果该评论是对其他评论的回复。
  5. User:

    • 类型: VmUserInfo?(可空类型)
    • 功能: 表示评论者的用户信息。

方法

  • CreateMappings:
    • 参数: MapperConfigurationExpression cfg,用于配置映射。
    • 功能: 使用 AutoMapper 创建从 MembleCommentComment 的映射。
    • 映射逻辑:
      • 创建一个新的 Comment 实体,并将 MembleComment 的属性映射到 Comment 的相应属性。
      • Commenter 属性被初始化为 MembleCommenter 对象,其中包含评论者的头像、身份(管理员或成员)和昵称。

总结

整体来看,MembleComment 类用于表示一个评论的视图模型,包含了评论的基本信息和评论者的信息。通过实现 IHaveCustomMapping 接口,类能够与 AutoMapper 配合使用,将视图模型转换为数据实体(Comment)。这使得在处理评论时,可以方便地将用户输入的数据映射到后端的数据结构中。

loading