using System;
using System.Collections.Generic;
using Dpz.Core.Entity.Base.MapperConfig;
using Dpz.Core.Public.Entity;

namespace Dpz.Core.Public.ViewModel.Response;

public class ArticleMiniResponse : IMapFrom<Article>
{
    public required string Id { get; set; }

    /// <summary>
    /// 文章标题
    /// </summary>
    public required string Title { get; set; }

    /// <summary>
    /// 简介
    /// </summary>
    public string? Introduction { get; set; }

    /// <summary>
    /// 主图片
    /// </summary>
    public string? MainImage { get; set; }

    /// <summary>
    /// 回复量
    /// </summary>
    public int CommentCount { get; set; }

    /// <summary>
    /// 查看量
    /// </summary>
    public int ViewCount { get; set; }

    /// <summary>
    /// 文章相关图片地址
    /// </summary>
    public List<string> ImagesAddress { get; set; } = [];

    /// <summary>
    /// 标签
    /// </summary>
    public List<string> Tags { get; set; } = [];

    /// <summary>
    /// 作者
    /// </summary>
    public required VmUserInfo Author { get; set; }

    /// <summary>
    /// 来源
    /// </summary>
    public string? From { get; set; }

    /// <summary>
    /// 发表时间
    /// </summary>
    public DateTime CreateTime
    {
        get => field.ToLocalTime();
        set;
    }

    /// <summary>
    /// 最后修改时间
    /// </summary>
    public DateTime LastUpdateTime
    {
        get => field.ToLocalTime();
        set;
    }
}
⚠⚠    以下内容为AI分析的结果,请根据实际情况进行判断。

这段代码定义了一个名为 ArticleMiniResponse 的 C# 类,它是一个用于响应文章数据的视图模型(ViewModel),主要用于简化文章数据的传输和展示。以下是代码的详细解释:

1. 命名空间和依赖

  • 命名空间Dpz.Core.Public.ViewModel.Response,表明这是一个响应相关的视图模型。
  • 依赖
    • Dpz.Core.Entity.Base.MapperConfig:包含 IMapFrom<T> 接口,表明这个类可以从 Article 实体映射而来(通常用于对象映射工具,如 AutoMapper)。
    • Dpz.Core.Public.Entity:包含 Article 实体类的定义。

2. 类定义

public class ArticleMiniResponse : IMapFrom<Article>
  • 继承 IMapFrom<Article>,表示这个类可以从 Article 实体自动映射。

3. 属性说明

以下是 ArticleMiniResponse 的属性及其作用:

(1) 基本文章信息

  • Id (string, required): 文章的唯一标识符。
  • Title (string, required): 文章标题。
  • Introduction (string?, nullable): 文章简介(可选)。
  • MainImage (string?, nullable): 文章主图片 URL(可选)。

(2) 统计信息

  • CommentCount (int): 文章的回复数量。
  • ViewCount (int): 文章的查看数量。

(3) 文章相关资源

  • ImagesAddress (List<string>): 文章相关的图片地址列表(默认为空列表)。
  • Tags (List<string>): 文章的标签列表(默认为空列表)。

(4) 作者信息

  • Author (VmUserInfo, required): 文章作者的信息(VmUserInfo 可能是另一个视图模型)。

(5) 来源信息

  • From (string?, nullable): 文章来源(可选)。

(6) 时间信息

  • CreateTime (DateTime): 文章的发表时间(自动转换为本地时间)。
  • LastUpdateTime (DateTime): 文章的最后修改时间(自动转换为本地时间)。

4. 时间处理

public DateTime CreateTime
{
    get => field.ToLocalTime();
    set;
}
  • 这里的 CreateTimeLastUpdateTime 在获取时会自动转换为本地时间(.ToLocalTime()),但存储时仍然是 UTC 时间(或其他时区)。

5. 默认值

  • ImagesAddressTags 默认初始化为空列表 (= []),避免 null 引用问题。

6. 用途

这个类的主要用途是:

  1. API 响应:在 Web API 中返回文章数据的简化版本(例如文章列表页)。
  2. 前端展示:提供前端所需的必要字段,避免返回完整的 Article 实体(可能包含敏感或不必要的数据)。
  3. 对象映射:通过 IMapFrom<Article>,可以使用 AutoMapper 等工具自动从 Article 实体转换到 ArticleMiniResponse

7. C# 新特性

  • required 关键字(C# 11+):表示该属性必须在对象初始化时赋值,否则编译错误。
  • List<string> = []:使用集合表达式初始化列表(C# 12+)。

总结

ArticleMiniResponse 是一个轻量级的文章数据模型,用于 API 响应,包含文章的核心信息(如标题、作者、时间、统计等),并支持从 Article 实体自动映射。它优化了数据传输,确保只返回必要的信息。

评论加载中...