refactor: 批量新增枚举类型并完成实体、DTO、服务层枚举替换

- 新增30+业务枚举类型覆盖用户、宠物、商城、社区、积分等模块
- 完成实体类、DTO、服务层的字符串枚举替换为强类型枚举
- 修复用户状态枚举名称变更,将Frozen改为Disabled
- 新增批量发布社区消息接口与控制器实现
- 新增操作日志、积分管理、补偿任务相关服务与DTO
This commit is contained in:
glz
2026-06-08 16:57:44 +08:00
parent 698c404b72
commit 78b686f9e5
116 changed files with 4861 additions and 307 deletions

View File

@ -1,4 +1,5 @@
using QYZH.InteractiveMagazine.Models.Dto;
using QYZH.InteractiveMagazine.Models.Enum;
namespace QYZH.InteractiveMagazine.Models.Dto;
@ -20,7 +21,7 @@ public class AdminUserInput
/// <summary>
/// 管理员类型: SuperAdmin, Editor
/// </summary>
public string Type { get; set; } = "Editor";
public AdminUserTypeEnum Type { get; set; } = AdminUserTypeEnum.Editor;
/// <summary>
/// 状态: Active, Inactive
@ -92,5 +93,5 @@ public class AdminUserQueryInput : PageQueryModel
/// <summary>
/// 状态
/// </summary>
public string? Status { get; set; }
public int? Status { get; set; }
}

View File

@ -32,10 +32,6 @@ public class AdminMessageQueryInput : PageQueryModel
/// </summary>
public bool? IsActive { get; set; }
/// <summary>
/// 内容关键词(模糊查询)
/// </summary>
public string? Keyword { get; set; }
/// <summary>
/// 用户ID
@ -172,6 +168,17 @@ public class AdminFreezeInput
public int Status { get; set; }
}
/// <summary>
/// 批量发布消息入参
/// </summary>
public class AdminBatchPublishInput
{
/// <summary>
/// 消息ID列表
/// </summary>
public List<long> Ids { get; set; } = new();
}
#endregion
#region DTO

View File

@ -0,0 +1,241 @@
using System.ComponentModel.DataAnnotations;
using QYZH.InteractiveMagazine.Models.Enum;
namespace QYZH.InteractiveMagazine.Models.Dto.Compensation;
/// <summary>
/// 补偿任务分页查询输入
/// </summary>
public class CompensationTaskQueryInput : PageQueryModel
{
/// <summary>
/// 按用户Id筛选
/// </summary>
public long? UserId { get; set; }
/// <summary>
/// 按任务类型筛选PetFeeding/UserPoints/UserGrowth/SendNotification
/// </summary>
public CompensationTaskTypeEnum? TaskType { get; set; }
/// <summary>
/// 按状态筛选Pending/Processing/Success/Failed/Cancelled
/// </summary>
public CompensationTaskStatusEnum? Status { get; set; }
/// <summary>
/// 按业务来源筛选CheckIn/Purchase/Activity等
/// </summary>
public string? BusinessSource { get; set; }
}
/// <summary>
/// 手动重试补偿任务输入
/// </summary>
public class CompensationRetryInput
{
/// <summary>
/// 重试原因
/// </summary>
[Required(ErrorMessage = "重试原因不能为空")]
public string Reason { get; set; } = string.Empty;
}
/// <summary>
/// 标记补偿任务已解决输入
/// </summary>
public class CompensationResolveInput
{
/// <summary>
/// 处理说明
/// </summary>
[Required(ErrorMessage = "处理说明不能为空")]
public string ResolveNote { get; set; } = string.Empty;
}
/// <summary>
/// 补偿任务管理输出(含用户昵称)
/// </summary>
public class CompensationManageOutput
{
/// <summary>
/// 任务Id
/// </summary>
public long Id { get; set; }
/// <summary>
/// 任务类型
/// </summary>
public CompensationTaskTypeEnum TaskType { get; set; }
/// <summary>
/// 业务来源
/// </summary>
public string BusinessSource { get; set; } = string.Empty;
/// <summary>
/// 关联业务Id
/// </summary>
public string? BusinessId { get; set; }
/// <summary>
/// 用户Id
/// </summary>
public long UserId { get; set; }
/// <summary>
/// 用户昵称
/// </summary>
public string? UserName { get; set; }
/// <summary>
/// 处理参数JSON
/// </summary>
public string Payload { get; set; } = string.Empty;
/// <summary>
/// 异常消息
/// </summary>
public string ErrorMessage { get; set; } = string.Empty;
/// <summary>
/// 异常来源
/// </summary>
public string ErrorSource { get; set; } = string.Empty;
/// <summary>
/// 已重试次数
/// </summary>
public int RetryCount { get; set; }
/// <summary>
/// 最大重试次数
/// </summary>
public int MaxRetries { get; set; }
/// <summary>
/// 状态
/// </summary>
public CompensationTaskStatusEnum Status { get; set; }
/// <summary>
/// 最后处理时间
/// </summary>
public DateTime? ProcessedAt { get; set; }
/// <summary>
/// 计划执行时间
/// </summary>
public DateTime? ScheduledAt { get; set; }
/// <summary>
/// 处理结果
/// </summary>
public string? ResultMessage { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreatedAt { get; set; }
}
/// <summary>
/// 补偿任务详情输出(含审计字段)
/// </summary>
public class CompensationManageDetailOutput
{
/// <summary>
/// 任务Id
/// </summary>
public long Id { get; set; }
/// <summary>
/// 任务类型
/// </summary>
public CompensationTaskTypeEnum TaskType { get; set; }
/// <summary>
/// 业务来源
/// </summary>
public string BusinessSource { get; set; } = string.Empty;
/// <summary>
/// 关联业务Id
/// </summary>
public string? BusinessId { get; set; }
/// <summary>
/// 用户Id
/// </summary>
public long UserId { get; set; }
/// <summary>
/// 用户昵称
/// </summary>
public string? UserName { get; set; }
/// <summary>
/// 处理参数JSON
/// </summary>
public string Payload { get; set; } = string.Empty;
/// <summary>
/// 异常消息
/// </summary>
public string ErrorMessage { get; set; } = string.Empty;
/// <summary>
/// 异常来源
/// </summary>
public string ErrorSource { get; set; } = string.Empty;
/// <summary>
/// 已重试次数
/// </summary>
public int RetryCount { get; set; }
/// <summary>
/// 最大重试次数
/// </summary>
public int MaxRetries { get; set; }
/// <summary>
/// 状态
/// </summary>
public CompensationTaskStatusEnum Status { get; set; }
/// <summary>
/// 最后处理时间
/// </summary>
public DateTime? ProcessedAt { get; set; }
/// <summary>
/// 计划执行时间
/// </summary>
public DateTime? ScheduledAt { get; set; }
/// <summary>
/// 处理结果
/// </summary>
public string? ResultMessage { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreatedAt { get; set; }
/// <summary>
/// 创建人
/// </summary>
public string? CreatedBy { get; set; }
/// <summary>
/// 修改人
/// </summary>
public string? UpdatedBy { get; set; }
/// <summary>
/// 修改时间
/// </summary>
public DateTime? UpdatedAt { get; set; }
}

View File

@ -1,56 +1,16 @@
using QYZH.InteractiveMagazine.Models.Enum;
namespace QYZH.InteractiveMagazine.Models.Dto.Compensation;
/// <summary>
/// 补偿任务类型常量
/// </summary>
public static class CompensationTaskType
{
/// <summary>
/// 宠物喂养补偿
/// Payload: { "PetId": long, "GrowthPoints": int }
/// </summary>
public const string PetFeeding = "PetFeeding";
/// <summary>
/// 用户积分补偿
/// Payload: { "Points": int, "ChangeType": string, "Description": string }
/// </summary>
public const string UserPoints = "UserPoints";
/// <summary>
/// 用户成长值补偿
/// Payload: { "GrowthPoints": int }
/// </summary>
public const string UserGrowth = "UserGrowth";
/// <summary>
/// 发送通知补偿
/// Payload: { "TemplateId": string, "Data": object }
/// </summary>
public const string SendNotification = "SendNotification";
}
/// <summary>
/// 补偿任务状态常量
/// </summary>
public static class CompensationTaskStatus
{
public const string Pending = "Pending";
public const string Processing = "Processing";
public const string Success = "Success";
public const string Failed = "Failed";
public const string Cancelled = "Cancelled";
}
/// <summary>
/// 创建补偿任务输入
/// </summary>
public class CreateCompensationTaskInput
{
/// <summary>
/// 任务类型(使用 CompensationTaskType 常量
/// 任务类型(使用 CompensationTaskTypeEnum 枚举
/// </summary>
public string TaskType { get; set; } = string.Empty;
public CompensationTaskTypeEnum TaskType { get; set; }
/// <summary>
/// 业务来源(如 CheckIn、Purchase
@ -94,7 +54,7 @@ public class CreateCompensationTaskInput
public class CompensationTaskOutput
{
public long Id { get; set; }
public string TaskType { get; set; } = string.Empty;
public CompensationTaskTypeEnum TaskType { get; set; }
public string BusinessSource { get; set; } = string.Empty;
public string? BusinessId { get; set; }
public long UserId { get; set; }
@ -103,7 +63,7 @@ public class CompensationTaskOutput
public string ErrorSource { get; set; } = string.Empty;
public int RetryCount { get; set; }
public int MaxRetries { get; set; }
public string Status { get; set; } = string.Empty;
public CompensationTaskStatusEnum Status { get; set; }
public DateTime? ProcessedAt { get; set; }
public DateTime? ScheduledAt { get; set; }
public string? ResultMessage { get; set; }
@ -118,12 +78,12 @@ public class GetCompensationTasksInput
/// <summary>
/// 按状态筛选
/// </summary>
public string? Status { get; set; }
public CompensationTaskStatusEnum? Status { get; set; }
/// <summary>
/// 按任务类型筛选
/// </summary>
public string? TaskType { get; set; }
public CompensationTaskTypeEnum? TaskType { get; set; }
/// <summary>
/// 按业务来源筛选
@ -142,9 +102,9 @@ public class GetCompensationTasksInput
public class UpdateCompensationStatusInput
{
/// <summary>
/// 目标状态(使用 CompensationTaskStatus 常量
/// 目标状态(使用 CompensationTaskStatusEnum 枚举
/// </summary>
public string Status { get; set; } = string.Empty;
public CompensationTaskStatusEnum Status { get; set; }
/// <summary>
/// 处理结果描述

View File

@ -1,3 +1,5 @@
using QYZH.InteractiveMagazine.Models.Enum;
namespace QYZH.InteractiveMagazine.Models.Dto;
/// <summary>
@ -18,7 +20,7 @@ public class BindJournalInput
/// <summary>
/// 关联类型: Read(已读), Favorite(收藏), Subscribe(订阅),默认 Subscribe
/// </summary>
public string Type { get; set; } = "Subscribe";
public string Type { get; set; } = UserJournalTypeEnum.Subscribe.ToString();
}
/// <summary>

View File

@ -1,4 +1,5 @@
using QYZH.InteractiveMagazine.Models.Dto;
using QYZH.InteractiveMagazine.Models.Enum;
namespace QYZH.InteractiveMagazine.Models.Dto;

View File

@ -1,3 +1,5 @@
using QYZH.InteractiveMagazine.Models.Enum;
namespace QYZH.InteractiveMagazine.Models.Dto;
/// <summary>
@ -28,7 +30,7 @@ public class MedalInput
/// <summary>
/// 勋章的类型: Pet, Community
/// </summary>
public string Type { get; set; } = "Pet";
public string Type { get; set; } = MedalTypeEnum.Pet.ToString();
/// <summary>
/// 书id

View File

@ -0,0 +1,201 @@
namespace QYZH.InteractiveMagazine.Models.Dto;
/// <summary>
/// 操作类型常量
/// </summary>
public static class OperationLogActionType
{
/// <summary>
/// 手动增加积分
/// </summary>
public const string ManualAddPoints = "ManualAddPoints";
/// <summary>
/// 手动扣除积分
/// </summary>
public const string ManualDeductPoints = "ManualDeductPoints";
/// <summary>
/// 补偿任务手动重试
/// </summary>
public const string CompensationRetry = "CompensationRetry";
/// <summary>
/// 补偿任务标记已解决
/// </summary>
public const string CompensationResolve = "CompensationResolve";
}
/// <summary>
/// 目标类型常量
/// </summary>
public static class OperationLogTargetType
{
/// <summary>
/// 用户
/// </summary>
public const string User = "User";
/// <summary>
/// 补偿任务
/// </summary>
public const string CompensationTask = "CompensationTask";
}
/// <summary>
/// 操作日志分页查询输入
/// </summary>
public class OperationLogQueryInput : PageQueryModel
{
/// <summary>
/// 按操作人用户名筛选(模糊查询)
/// </summary>
public string? OperatorName { get; set; }
/// <summary>
/// 按操作类型筛选
/// </summary>
public string? ActionType { get; set; }
/// <summary>
/// 按目标类型筛选
/// </summary>
public string? TargetType { get; set; }
/// <summary>
/// 按目标记录Id筛选
/// </summary>
public long? TargetId { get; set; }
}
/// <summary>
/// 操作日志输出
/// </summary>
public class OperationLogOutput
{
/// <summary>
/// 记录Id
/// </summary>
public long Id { get; set; }
/// <summary>
/// 操作人Id
/// </summary>
public long OperatorId { get; set; }
/// <summary>
/// 操作人用户名
/// </summary>
public string OperatorName { get; set; } = string.Empty;
/// <summary>
/// 操作类型
/// </summary>
public string ActionType { get; set; } = string.Empty;
/// <summary>
/// 目标类型
/// </summary>
public string TargetType { get; set; } = string.Empty;
/// <summary>
/// 目标记录Id
/// </summary>
public long TargetId { get; set; }
/// <summary>
/// 目标名称
/// </summary>
public string? TargetName { get; set; }
/// <summary>
/// 操作详情
/// </summary>
public string? Detail { get; set; }
/// <summary>
/// IP地址
/// </summary>
public string? IpAddress { get; set; }
/// <summary>
/// 操作时间
/// </summary>
public DateTime CreatedAt { get; set; }
}
/// <summary>
/// 操作日志详情输出
/// </summary>
public class OperationLogDetailOutput
{
/// <summary>
/// 记录Id
/// </summary>
public long Id { get; set; }
/// <summary>
/// 操作类型
/// </summary>
public string ActionType { get; set; } = string.Empty;
/// <summary>
/// 目标类型
/// </summary>
public string TargetType { get; set; } = string.Empty;
/// <summary>
/// 目标记录Id
/// </summary>
public long TargetId { get; set; }
/// <summary>
/// 目标名称
/// </summary>
public string? TargetName { get; set; }
/// <summary>
/// 操作详情
/// </summary>
public string? Detail { get; set; }
/// <summary>
/// IP地址
/// </summary>
public string? IpAddress { get; set; }
/// <summary>
/// 操作时间
/// </summary>
public DateTime CreatedAt { get; set; }
/// <summary>
/// 操作人用户名
/// </summary>
public string OperatorName { get; set; } = string.Empty;
/// <summary>
/// 操作人手机号(管理员表无此字段时可为空)
/// </summary>
public string? OperatorPhone { get; set; }
/// <summary>
/// 操作人角色/类型
/// </summary>
public string? OperatorRole { get; set; }
/// <summary>
/// 被操作人用户名(当 TargetType 为 User 时)
/// </summary>
public string? TargetUserName { get; set; }
/// <summary>
/// 被操作人手机号(当 TargetType 为 User 时)
/// </summary>
public string? TargetUserPhone { get; set; }
/// <summary>
/// 被操作人头像(当 TargetType 为 User 时)
/// </summary>
public string? TargetUserAvatar { get; set; }
}

View File

@ -0,0 +1,98 @@
using QYZH.InteractiveMagazine.Models.Enum;
namespace QYZH.InteractiveMagazine.Models.Dto.Pet;
/// <summary>
/// 进化阶段创建/更新输入
/// </summary>
public class PetEvolutionInput
{
/// <summary>
/// 所属宠物模板Id
/// </summary>
public long TemplateId { get; set; }
/// <summary>
/// 阶段名称
/// </summary>
public string StageName { get; set; } = string.Empty;
/// <summary>
/// 阶段等级
/// </summary>
public int StageLevel { get; set; }
/// <summary>
/// 进化所需成长值
/// </summary>
public int RequiredGrowth { get; set; }
/// <summary>
/// 前一形态Idnull表示初始形态
/// </summary>
public long? PreviousEvolutionId { get; set; }
/// <summary>
/// 基础力量
/// </summary>
public int BaseStrength { get; set; }
/// <summary>
/// 基础敏捷
/// </summary>
public int BaseAgility { get; set; }
/// <summary>
/// 基础智力
/// </summary>
public int BaseIntelligence { get; set; }
/// <summary>
/// 基础魅力
/// </summary>
public int BaseCharm { get; set; }
/// <summary>
/// 进化类型: Normal, Special
/// </summary>
public string Type { get; set; } = PetEvolutionTypeEnum.Normal.ToString();
}
/// <summary>
/// 进化阶段输出
/// </summary>
public class PetEvolutionOutput
{
public long Id { get; set; }
public long TemplateId { get; set; }
public string StageName { get; set; } = string.Empty;
public int StageLevel { get; set; }
public int RequiredGrowth { get; set; }
public long? PreviousEvolutionId { get; set; }
public int BaseStrength { get; set; }
public int BaseAgility { get; set; }
public int BaseIntelligence { get; set; }
public int BaseCharm { get; set; }
public string Type { get; set; } = string.Empty;
public string Status { get; set; } = string.Empty;
public string? CreatedBy { get; set; }
public DateTime CreatedAt { get; set; }
public string? UpdatedBy { get; set; }
public DateTime? UpdatedAt { get; set; }
}
/// <summary>
/// 进化阶段分页查询输入
/// </summary>
public class PetEvolutionQueryInput : PageQueryModel
{
/// <summary>
/// 所属宠物模板Id必填
/// </summary>
public long TemplateId { get; set; }
/// <summary>
/// 阶段名称(模糊搜索)
/// </summary>
public string? StageName { get; set; }
}

View File

@ -0,0 +1,131 @@
using QYZH.InteractiveMagazine.Models.Enum;
namespace QYZH.InteractiveMagazine.Models.Dto.Pet;
/// <summary>
/// 皮肤创建/更新输入
/// </summary>
public class PetSkinInput
{
/// <summary>
/// 所属宠物模板Id
/// </summary>
public long TemplateId { get; set; }
/// <summary>
/// 皮肤名称
/// </summary>
public string Name { get; set; } = string.Empty;
/// <summary>
/// 描述/特效说明
/// </summary>
public string? Description { get; set; }
/// <summary>
/// 稀有度: Normal, Rare, Epic, Legendary
/// </summary>
public string Rarity { get; set; } = "Normal";
/// <summary>
/// 排序权重
/// </summary>
public int SortOrder { get; set; }
/// <summary>
/// 皮肤类型: Normal, Limited, Event
/// </summary>
public string Type { get; set; } = PetSkinTypeEnum.Normal.ToString();
}
/// <summary>
/// 皮肤输出
/// </summary>
public class PetSkinOutput
{
public long Id { get; set; }
public long TemplateId { get; set; }
public string Name { get; set; } = string.Empty;
public string? Description { get; set; }
public string Rarity { get; set; } = string.Empty;
public int SortOrder { get; set; }
public string Type { get; set; } = string.Empty;
public string? CreatedBy { get; set; }
public DateTime CreatedAt { get; set; }
public string? UpdatedBy { get; set; }
public DateTime? UpdatedAt { get; set; }
/// <summary>
/// 关联的皮肤图片列表
/// </summary>
public List<PetSkinImageOutput>? Images { get; set; }
}
/// <summary>
/// 皮肤分页查询输入
/// </summary>
public class PetSkinQueryInput : PageQueryModel
{
/// <summary>
/// 所属宠物模板Id必填
/// </summary>
public long TemplateId { get; set; }
/// <summary>
/// 皮肤名称(模糊搜索)
/// </summary>
public string? Name { get; set; }
/// <summary>
/// 稀有度: Normal, Rare, Epic, Legendary
/// </summary>
public string? Rarity { get; set; }
}
/// <summary>
/// 皮肤图片创建/更新输入
/// </summary>
public class PetSkinImageInput
{
/// <summary>
/// 皮肤Id
/// </summary>
public long SkinId { get; set; }
/// <summary>
/// 进化阶段Id
/// </summary>
public long EvolutionStageId { get; set; }
/// <summary>
/// 图片地址
/// </summary>
public string ImageUrl { get; set; } = string.Empty;
/// <summary>
/// 图片顺序(动画帧序号)
/// </summary>
public int SortOrder { get; set; }
/// <summary>
/// 图片类型: Normal, Special
/// </summary>
public string Type { get; set; } = PetSkinImageTypeEnum.Normal.ToString();
}
/// <summary>
/// 皮肤图片输出
/// </summary>
public class PetSkinImageOutput
{
public long Id { get; set; }
public long SkinId { get; set; }
public long EvolutionStageId { get; set; }
public string ImageUrl { get; set; } = string.Empty;
public int SortOrder { get; set; }
public string Type { get; set; } = string.Empty;
public string? CreatedBy { get; set; }
public DateTime CreatedAt { get; set; }
public string? UpdatedBy { get; set; }
public DateTime? UpdatedAt { get; set; }
}

View File

@ -0,0 +1,79 @@
using QYZH.InteractiveMagazine.Models.Enum;
namespace QYZH.InteractiveMagazine.Models.Dto.Pet;
/// <summary>
/// 宠物模板创建/更新输入
/// </summary>
public class PetTemplateInput
{
/// <summary>
/// 模板名称
/// </summary>
public string Name { get; set; } = string.Empty;
/// <summary>
/// 模板描述
/// </summary>
public string? Description { get; set; }
/// <summary>
/// 默认初始进化形态Id
/// </summary>
public long DefaultEvolutionId { get; set; }
/// <summary>
/// 模板图标地址
/// </summary>
public string? IconUrl { get; set; }
/// <summary>
/// 排序权重
/// </summary>
public int SortOrder { get; set; }
/// <summary>
/// 模板类型: Normal, Special, Limited
/// </summary>
public string Type { get; set; } = PetTemplateTypeEnum.Normal.ToString();
}
/// <summary>
/// 宠物模板输出
/// </summary>
public class PetTemplateOutput
{
public long Id { get; set; }
public string Name { get; set; } = string.Empty;
public string? Description { get; set; }
public long DefaultEvolutionId { get; set; }
public string? IconUrl { get; set; }
public int SortOrder { get; set; }
public string Type { get; set; } = string.Empty;
public string Status { get; set; } = string.Empty;
public string? CreatedBy { get; set; }
public DateTime CreatedAt { get; set; }
public string? UpdatedBy { get; set; }
public DateTime? UpdatedAt { get; set; }
}
/// <summary>
/// 宠物模板分页查询输入
/// </summary>
public class PetTemplateQueryInput : PageQueryModel
{
/// <summary>
/// 模板名称(模糊搜索)
/// </summary>
public string? Name { get; set; }
/// <summary>
/// 模板类型: Normal, Special, Limited
/// </summary>
public string? Type { get; set; }
/// <summary>
/// 状态: Active, Inactive
/// </summary>
public string? Status { get; set; }
}

View File

@ -0,0 +1,219 @@
namespace QYZH.InteractiveMagazine.Models.Dto.Points;
using QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 积分流水查询输入
/// </summary>
public class PointsRecordQueryInput : PageQueryModel
{
/// <summary>
/// 用户Id
/// </summary>
public long UserId { get; set; }
/// <summary>
/// 变动类型筛选
/// </summary>
public PointsChangeTypeEnum? ChangeType { get; set; }
/// <summary>
/// 流水分类筛选Income/Expense
/// </summary>
public PointsFlowTypeEnum? Type { get; set; }
/// <summary>
/// 状态筛选Success/Failed 等)
/// </summary>
public string? Status { get; set; }
}
/// <summary>
/// 积分流水输出
/// </summary>
public class PointsRecordOutput
{
/// <summary>
/// 记录Id
/// </summary>
public long Id { get; set; }
/// <summary>
/// 变动数值(正数为收入,负数为支出)
/// </summary>
public int ChangeAmount { get; set; }
/// <summary>
/// 变动后余额
/// </summary>
public int BalanceAfter { get; set; }
/// <summary>
/// 变动类型(如 SignIn、Exchange、TaskReward 等)
/// </summary>
public string ChangeType { get; set; } = string.Empty;
/// <summary>
/// 备注描述
/// </summary>
public string? Description { get; set; }
/// <summary>
/// 流水分类Income/Expense
/// </summary>
public string Type { get; set; } = string.Empty;
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreatedAt { get; set; }
}
/// <summary>
/// 增加积分输入
/// </summary>
public class AddPointsInput
{
/// <summary>
/// 用户Id
/// </summary>
public long UserId { get; set; }
/// <summary>
/// 增加数量
/// </summary>
public int Amount { get; set; }
/// <summary>
/// 变动类型
/// </summary>
public PointsChangeTypeEnum ChangeType { get; set; }
/// <summary>
/// 关联业务Id
/// </summary>
public long? RelatedId { get; set; }
/// <summary>
/// 备注描述
/// </summary>
public string? Description { get; set; }
/// <summary>
/// 操作人名称(为空时默认使用用户昵称)
/// </summary>
public string? OperatorName { get; set; }
}
/// <summary>
/// 扣除积分输入
/// </summary>
public class DeductPointsInput
{
/// <summary>
/// 用户Id
/// </summary>
public long UserId { get; set; }
/// <summary>
/// 扣除数量
/// </summary>
public int Amount { get; set; }
/// <summary>
/// 变动类型
/// </summary>
public PointsChangeTypeEnum ChangeType { get; set; }
/// <summary>
/// 关联业务Id
/// </summary>
public long? RelatedId { get; set; }
/// <summary>
/// 备注描述
/// </summary>
public string? Description { get; set; }
/// <summary>
/// 操作人名称(为空时默认使用用户昵称)
/// </summary>
public string? OperatorName { get; set; }
}
/// <summary>
/// 增加积分输出
/// </summary>
public class AddPointsOutput
{
/// <summary>
/// 积分流水记录Id
/// </summary>
public long RecordId { get; set; }
/// <summary>
/// 操作前积分余额
/// </summary>
public int PreviousBalance { get; set; }
/// <summary>
/// 操作后积分余额
/// </summary>
public int NewBalance { get; set; }
/// <summary>
/// 实际增加数量
/// </summary>
public int AddedAmount { get; set; }
}
/// <summary>
/// 扣除积分输出
/// </summary>
public class DeductPointsOutput
{
/// <summary>
/// 积分流水记录Id
/// </summary>
public long RecordId { get; set; }
/// <summary>
/// 操作前积分余额
/// </summary>
public int PreviousBalance { get; set; }
/// <summary>
/// 操作后积分余额
/// </summary>
public int NewBalance { get; set; }
/// <summary>
/// 实际扣除数量
/// </summary>
public int DeductedAmount { get; set; }
}
/// <summary>
/// 用户积分概览
/// </summary>
public class PointsSummaryOutput
{
/// <summary>
/// 用户Id
/// </summary>
public long UserId { get; set; }
/// <summary>
/// 当前积分余额
/// </summary>
public int CurrentBalance { get; set; }
/// <summary>
/// 累计获得积分
/// </summary>
public int TotalIncome { get; set; }
/// <summary>
/// 累计消耗积分
/// </summary>
public int TotalExpense { get; set; }
}

View File

@ -0,0 +1,75 @@
using System.ComponentModel.DataAnnotations;
namespace QYZH.InteractiveMagazine.Models.Dto.Points;
/// <summary>
/// 手动增加积分输入
/// </summary>
public class ManualAddPointsInput
{
/// <summary>
/// 增加数量必须大于0
/// </summary>
[Range(1, int.MaxValue, ErrorMessage = "增加积分数量必须大于0")]
public int Amount { get; set; }
/// <summary>
/// 操作原因(必填)
/// </summary>
[Required(ErrorMessage = "操作原因不能为空")]
public string Reason { get; set; } = string.Empty;
}
/// <summary>
/// 手动扣除积分输入
/// </summary>
public class ManualDeductPointsInput
{
/// <summary>
/// 扣除数量必须大于0
/// </summary>
[Range(1, int.MaxValue, ErrorMessage = "扣除积分数量必须大于0")]
public int Amount { get; set; }
/// <summary>
/// 操作原因(必填)
/// </summary>
[Required(ErrorMessage = "操作原因不能为空")]
public string Reason { get; set; } = string.Empty;
}
/// <summary>
/// 手动积分操作输出
/// </summary>
public class ManualPointsOutput
{
/// <summary>
/// 积分流水记录Id
/// </summary>
public long RecordId { get; set; }
/// <summary>
/// 操作前积分余额
/// </summary>
public int PreviousBalance { get; set; }
/// <summary>
/// 操作后积分余额
/// </summary>
public int NewBalance { get; set; }
/// <summary>
/// 变动数量(正数为增加,负数为扣除)
/// </summary>
public int ChangeAmount { get; set; }
/// <summary>
/// 操作人
/// </summary>
public string OperatorName { get; set; } = string.Empty;
/// <summary>
/// 操作时间
/// </summary>
public DateTime OperatedAt { get; set; }
}

View File

@ -1,4 +1,6 @@
using QYZH.InteractiveMagazine.Models.Dto;
using QYZH.InteractiveMagazine.Models.Dto.CheckIn;
using QYZH.InteractiveMagazine.Models.Dto.Compensation;
using QYZH.InteractiveMagazine.Models.Dto.Points;
namespace QYZH.InteractiveMagazine.Models.Dto;
@ -59,6 +61,78 @@ public class UsersOutput
public int GrowthPoints { get; set; }
}
/// <summary>
/// 用户详情输出DTO包含基本信息、积分记录、签到记录、补偿任务、期刊列表
/// </summary>
public class UserDetailOutput
{
/// <summary>
/// 用户基本信息
/// </summary>
public UsersOutput BasicInfo { get; set; } = new();
/// <summary>
/// 积分使用记录最近20条
/// </summary>
public List<PointsRecordOutput> PointsRecords { get; set; } = [];
/// <summary>
/// 签到记录最近30条
/// </summary>
public List<CheckInRecordOutput> CheckInRecords { get; set; } = [];
/// <summary>
/// 失败的补偿任务(需要手动处理)
/// </summary>
public List<CompensationTaskOutput> FailedCompensationTasks { get; set; } = [];
/// <summary>
/// 用户拥有的期刊列表
/// </summary>
public List<UserJournalItemOutput> Journals { get; set; } = [];
}
/// <summary>
/// 用户期刊项输出DTO
/// </summary>
public class UserJournalItemOutput
{
/// <summary>
/// 绑定记录Id
/// </summary>
public long BindId { get; set; }
/// <summary>
/// 期刊Id
/// </summary>
public long JournalId { get; set; }
/// <summary>
/// 期刊标题
/// </summary>
public string JournalTitle { get; set; } = string.Empty;
/// <summary>
/// 期刊封面
/// </summary>
public string? CoverImageUrl { get; set; }
/// <summary>
/// 绑定类型: Read, Favorite, Subscribe
/// </summary>
public string Type { get; set; } = string.Empty;
/// <summary>
/// 绑定状态
/// </summary>
public string Status { get; set; } = string.Empty;
/// <summary>
/// 绑定时间
/// </summary>
public DateTime CreatedAt { get; set; }
}
/// <summary>
/// 更新用户状态输入DTO
/// </summary>

View File

@ -1,4 +1,5 @@
using QYZH.InteractiveMagazine.Models.Dto;
using QYZH.InteractiveMagazine.Models.Enum;
using Newtonsoft.Json;
namespace QYZH.InteractiveMagazine.Models.WeChat;
@ -89,12 +90,12 @@ public class WxUserInput
/// <summary>
/// 用户类型: Normal, VIP
/// </summary>
public string Type { get; set; } = "Normal";
public string Type { get; set; } = UsersTypeEnum.Normal.ToString();
/// <summary>
/// 状态: Active, Disabled
/// </summary>
public string Status { get; set; } = "Active";
public string Status { get; set; } = UserStatusEnum.Active.ToString();
/// <summary>
/// 密码默认手机后4位

View File

@ -1,4 +1,5 @@
using SqlSugar;
using QYZH.InteractiveMagazine.Models.Enum;
namespace QYZH.InteractiveMagazine.Models.Entity
{
@ -32,7 +33,7 @@ namespace QYZH.InteractiveMagazine.Models.Entity
/// Default:Editor
/// Nullable:False
/// </summary>
public string Type {get;set;}
public AdminUserTypeEnum Type {get;set;}
}
}

View File

@ -1,4 +1,5 @@
using SqlSugar;
using QYZH.InteractiveMagazine.Models.Enum;
namespace QYZH.InteractiveMagazine.Models.Entity
{
@ -40,13 +41,13 @@ namespace QYZH.InteractiveMagazine.Models.Entity
/// Default:Daily
/// Nullable:False
/// </summary>
public string Type {get;set;}
public CheckInConfigTypeEnum Type {get;set;}
/// <summary>
/// Desc:状态: Active, Inactive
/// Default:Active
/// Nullable:False
/// </summary>
public string Status {get;set;}
public CheckInConfigStatusEnum Status {get;set;}
}
}

View File

@ -1,4 +1,5 @@
using SqlSugar;
using QYZH.InteractiveMagazine.Models.Enum;
namespace QYZH.InteractiveMagazine.Models.Entity
{
@ -52,13 +53,6 @@ namespace QYZH.InteractiveMagazine.Models.Entity
/// Default:Normal
/// Nullable:False
/// </summary>
public string Type {get;set;}
/// <summary>
/// Desc:状态: Success
/// Default:Success
/// Nullable:False
/// </summary>
public string Status {get;set;}
public CheckInRecordTypeEnum Type { get;set;}
}
}

View File

@ -1,4 +1,5 @@
using SqlSugar;
using QYZH.InteractiveMagazine.Models.Enum;
namespace QYZH.InteractiveMagazine.Models.Entity
{
@ -79,7 +80,7 @@ namespace QYZH.InteractiveMagazine.Models.Entity
/// Default:Article
/// Nullable:False
/// </summary>
public string Type { get; set; }
public MessageTypeEnum Type { get; set; }
/// <summary>
/// Desc:点赞数

View File

@ -1,11 +1,12 @@
using SqlSugar;
using QYZH.InteractiveMagazine.Models.Enum;
namespace QYZH.InteractiveMagazine.Models.Entity
{
///<summary>
///模板评论表
///</summary>
[SugarTable("MessageComment")]
[SugarTable("CommunityMessageComment")]
public partial class CommunityMessageComment : SqlSugarBaseEntity
{
public CommunityMessageComment(){
@ -39,13 +40,13 @@ namespace QYZH.InteractiveMagazine.Models.Entity
/// Default:TemplateComment
/// Nullable:False
/// </summary>
public string Type {get;set;}
public CommunityMessageCommentTypeEnum Type {get;set;}
/// <summary>
/// Desc:状态: Published, Hidden
/// Default:Published
/// Nullable:False
/// </summary>
public string Status {get;set;}
public CommunityMessageCommentStatusEnum Status {get;set;}
}
}

View File

@ -1,4 +1,5 @@
using SqlSugar;
using QYZH.InteractiveMagazine.Models.Enum;
namespace QYZH.InteractiveMagazine.Models.Entity
{
@ -32,7 +33,7 @@ namespace QYZH.InteractiveMagazine.Models.Entity
/// Default:Like
/// Nullable:False
/// </summary>
public string Type { get; set; }
public CommunityMessageLikeTypeEnum Type { get; set; }
}
}

View File

@ -1,4 +1,5 @@
using SqlSugar;
using QYZH.InteractiveMagazine.Models.Enum;
namespace QYZH.InteractiveMagazine.Models.Entity
{
@ -33,13 +34,13 @@ namespace QYZH.InteractiveMagazine.Models.Entity
/// Default:Neutral
/// Nullable:False
/// </summary>
public string Type {get;set;}
public CommunityTemplateSentenceTypeEnum Type {get;set;}
/// <summary>
/// Desc:状态: Active, Inactive
/// Default:Active
/// Nullable:False
/// </summary>
public string Status {get;set;}
public CommunityTemplateSentenceStatusEnum Status {get;set;}
}
}

View File

@ -1,4 +1,5 @@
using SqlSugar;
using QYZH.InteractiveMagazine.Models.Enum;
namespace QYZH.InteractiveMagazine.Models.Entity
{
@ -19,7 +20,7 @@ namespace QYZH.InteractiveMagazine.Models.Entity
/// Default:
/// Nullable:False
/// </summary>
public string TaskType { get; set; }
public int TaskType { get; set; }
/// <summary>
/// Desc:业务来源(如 CheckIn、Purchase、Activity
@ -82,7 +83,7 @@ namespace QYZH.InteractiveMagazine.Models.Entity
/// Default:Pending
/// Nullable:False
/// </summary>
public new string Status { get; set; }
public CompensationTaskStatusEnum Status { get; set; }
/// <summary>
/// Desc:最后处理时间

View File

@ -2,6 +2,7 @@
using System.Linq;
using System.Text;
using SqlSugar;
using QYZH.InteractiveMagazine.Models.Enum;
namespace QYZH.InteractiveMagazine.Models.Entity
{
@ -98,7 +99,7 @@ namespace QYZH.InteractiveMagazine.Models.Entity
/// Default:Pending
/// Nullable:False
/// </summary>
public string Status {get;set;}
public DotFileStatusEnum Status {get;set;}
/// <summary>
/// Desc:

View File

@ -2,6 +2,7 @@
using System.Linq;
using System.Text;
using SqlSugar;
using QYZH.InteractiveMagazine.Models.Enum;
namespace QYZH.InteractiveMagazine.Models.Entity
{
@ -63,7 +64,7 @@ namespace QYZH.InteractiveMagazine.Models.Entity
/// Default:Pending
/// Nullable:False
/// </summary>
public string Status {get;set;}
public DotFileDetailStatusEnum Status {get;set;}
/// <summary>
/// Desc:

View File

@ -1,4 +1,5 @@
using SqlSugar;
using QYZH.InteractiveMagazine.Models.Enum;
namespace QYZH.InteractiveMagazine.Models.Entity
{
@ -64,6 +65,6 @@ namespace QYZH.InteractiveMagazine.Models.Entity
/// Default:Success
/// Nullable:False
/// </summary>
public new string Status { get; set; }
public ExchangeRecordStatusEnum Status { get; set; }
}
}

View File

@ -1,4 +1,5 @@
using SqlSugar;
using QYZH.InteractiveMagazine.Models.Enum;
namespace QYZH.InteractiveMagazine.Models.Entity
{
@ -80,13 +81,13 @@ namespace QYZH.InteractiveMagazine.Models.Entity
/// Default:Normal
/// Nullable:False
/// </summary>
public string Type {get;set;}
public JournalTypeEnum Type {get;set;}
/// <summary>
/// Desc:状态: Draft, Published, Archived
/// Default:Draft
/// Nullable:False
/// </summary>
public string Status {get;set;}
public JournalStatusEnum Status {get;set;}
}
}

View File

@ -1,7 +1,8 @@
using System;
using QYZH.InteractiveMagazine.Models.Enum;
using SqlSugar;
using System;
using System.Linq;
using System.Text;
using SqlSugar;
namespace QYZH.InteractiveMagazine.Models.Entity
{
@ -64,7 +65,7 @@ namespace QYZH.InteractiveMagazine.Models.Entity
/// Default:0
/// Nullable:False
/// </summary>
public int Type {get;set;}
public JournalCatalogTypeEnum Type {get;set;}
}

View File

@ -1,7 +1,8 @@
using System;
using QYZH.InteractiveMagazine.Models.Enum;
using SqlSugar;
using System;
using System.Linq;
using System.Text;
using SqlSugar;
namespace QYZH.InteractiveMagazine.Models.Entity
{
@ -42,7 +43,7 @@ namespace QYZH.InteractiveMagazine.Models.Entity
/// Default:
/// Nullable:False
/// </summary>
public int Type {get;set;}
public JournalPageTaskTypeEnum Type {get;set;}
/// <summary>
/// Desc:任务

View File

@ -1,4 +1,5 @@
using SqlSugar;
using QYZH.InteractiveMagazine.Models.Enum;
namespace QYZH.InteractiveMagazine.Models.Entity
{
@ -47,7 +48,7 @@ namespace QYZH.InteractiveMagazine.Models.Entity
/// Default:Pet
/// Nullable:False
/// </summary>
public string Type { get; set; }
public MedalTypeEnum Type { get; set; }
/// <summary>
/// Desc:书id

View File

@ -0,0 +1,68 @@
using SqlSugar;
namespace QYZH.InteractiveMagazine.Models.Entity;
/// <summary>
/// 操作日志表 — 记录后台管理员的所有手动操作
/// </summary>
[SugarTable("OperationLog")]
public partial class OperationLog : SqlSugarBaseEntity
{
public OperationLog() { }
/// <summary>
/// Desc:操作人Id管理员Id
/// Default:
/// Nullable:False
/// </summary>
public long OperatorId { get; set; }
/// <summary>
/// Desc:操作人用户名
/// Default:
/// Nullable:False
/// </summary>
public string OperatorName { get; set; }
/// <summary>
/// Desc:操作类型ManualAddPoints/ManualDeductPoints/CompensationRetry/CompensationResolve
/// Default:
/// Nullable:False
/// </summary>
public string ActionType { get; set; }
/// <summary>
/// Desc:目标类型User/CompensationTask
/// Default:
/// Nullable:False
/// </summary>
public string TargetType { get; set; }
/// <summary>
/// Desc:目标记录Id
/// Default:
/// Nullable:False
/// </summary>
public long TargetId { get; set; }
/// <summary>
/// Desc:目标名称(用户昵称/任务描述等,便于展示)
/// Default:
/// Nullable:True
/// </summary>
public string? TargetName { get; set; }
/// <summary>
/// Desc:操作详情JSON格式记录操作参数和结果
/// Default:
/// Nullable:True
/// </summary>
public string? Detail { get; set; }
/// <summary>
/// Desc:操作IP地址
/// Default:
/// Nullable:True
/// </summary>
public string? IpAddress { get; set; }
}

View File

@ -1,4 +1,5 @@
using SqlSugar;
using QYZH.InteractiveMagazine.Models.Enum;
namespace QYZH.InteractiveMagazine.Models.Entity
{
@ -78,13 +79,13 @@ namespace QYZH.InteractiveMagazine.Models.Entity
/// Default:Normal
/// Nullable:False
/// </summary>
public string Type { get; set; }
public PetEvolutionTypeEnum Type { get; set; }
/// <summary>
/// Desc:状态: Active, Inactive
/// Default:Active
/// Nullable:False
/// </summary>
public new string Status { get; set; }
public PetEvolutionStatusEnum Status { get; set; }
}
}

View File

@ -1,4 +1,5 @@
using SqlSugar;
using QYZH.InteractiveMagazine.Models.Enum;
namespace QYZH.InteractiveMagazine.Models.Entity
{
@ -60,13 +61,13 @@ namespace QYZH.InteractiveMagazine.Models.Entity
/// Default:Normal
/// Nullable:False
/// </summary>
public string Type {get;set;}
public PetFeedingRecordTypeEnum Type {get;set;}
/// <summary>
/// Desc:状态
/// Default:Success
/// Nullable:False
/// </summary>
public string Status {get;set;}
public PetFeedingRecordStatusEnum Status {get;set;}
}
}

View File

@ -1,4 +1,5 @@
using SqlSugar;
using QYZH.InteractiveMagazine.Models.Enum;
namespace QYZH.InteractiveMagazine.Models.Entity
{
@ -50,6 +51,6 @@ namespace QYZH.InteractiveMagazine.Models.Entity
/// Default:Normal
/// Nullable:False
/// </summary>
public string Type { get; set; }
public PetSkinTypeEnum Type { get; set; }
}
}

View File

@ -1,4 +1,5 @@
using SqlSugar;
using QYZH.InteractiveMagazine.Models.Enum;
namespace QYZH.InteractiveMagazine.Models.Entity
{
@ -43,6 +44,6 @@ namespace QYZH.InteractiveMagazine.Models.Entity
/// Default:Normal
/// Nullable:False
/// </summary>
public string Type { get; set; }
public PetSkinImageTypeEnum Type { get; set; }
}
}

View File

@ -1,4 +1,5 @@
using SqlSugar;
using QYZH.InteractiveMagazine.Models.Enum;
namespace QYZH.InteractiveMagazine.Models.Entity
{
@ -50,13 +51,13 @@ namespace QYZH.InteractiveMagazine.Models.Entity
/// Default:Normal
/// Nullable:False
/// </summary>
public string Type { get; set; }
public PetTemplateTypeEnum Type { get; set; }
/// <summary>
/// Desc:状态: Active, Inactive
/// Default:Active
/// Nullable:False
/// </summary>
public new string Status { get; set; }
public PetTemplateStatusEnum Status { get; set; }
}
}

View File

@ -1,4 +1,5 @@
using SqlSugar;
using QYZH.InteractiveMagazine.Models.Enum;
namespace QYZH.InteractiveMagazine.Models.Entity
{
@ -60,13 +61,13 @@ namespace QYZH.InteractiveMagazine.Models.Entity
/// Default:
/// Nullable:True
/// </summary>
public string Type {get;set;}
public PointsFlowTypeEnum Type {get;set;}
/// <summary>
/// Desc:状态: Success, Failed, Pending
/// Default:Success
/// Nullable:False
/// </summary>
public string Status {get;set;}
public PointsRecordStatusEnum Status {get;set;}
}
}

View File

@ -1,4 +1,5 @@
using SqlSugar;
using QYZH.InteractiveMagazine.Models.Enum;
namespace QYZH.InteractiveMagazine.Models.Entity
{
@ -46,7 +47,7 @@ namespace QYZH.InteractiveMagazine.Models.Entity
/// Default:
/// Nullable:False
/// </summary>
public string Type {get;set;}
public ProductTypeEnum Type {get;set;}
/// <summary>
/// Desc:售卖状态: OnSale, OffSale

View File

@ -14,7 +14,7 @@ namespace QYZH.InteractiveMagazine.Models.Entity
[SugarColumn(IsPrimaryKey = true, ColumnName = "Id")]
public long Id { get; set; } = YitIdHelper.NextId();
/// <summary>
/// Desc:状态 0禁用 1启用
/// Desc:
/// Default:1
/// Nullable:False
/// </summary>

View File

@ -1,4 +1,5 @@
using SqlSugar;
using QYZH.InteractiveMagazine.Models.Enum;
namespace QYZH.InteractiveMagazine.Models.Entity
{
@ -52,13 +53,13 @@ namespace QYZH.InteractiveMagazine.Models.Entity
/// Default:
/// Nullable:True
/// </summary>
public string Type {get;set;}
public UserBagTypeEnum Type {get;set;}
/// <summary>
/// Desc:状态: Available, Expired
/// Default:Available
/// Nullable:False
/// </summary>
public string Status {get;set;}
public UserBagStatusEnum Status {get;set;}
}
}

View File

@ -1,4 +1,5 @@
using SqlSugar;
using QYZH.InteractiveMagazine.Models.Enum;
namespace QYZH.InteractiveMagazine.Models.Entity
{
@ -35,7 +36,7 @@ namespace QYZH.InteractiveMagazine.Models.Entity
/// Nullable:False
/// </summary>
[SugarColumn(ColumnName = "Type")]
public string Type { get; set; }
public UserJournalTypeEnum Type { get; set; }
/// <summary>
/// Desc:状态: Active(正常), Inactive(失效)
@ -43,6 +44,6 @@ namespace QYZH.InteractiveMagazine.Models.Entity
/// Nullable:False
/// </summary>
[SugarColumn(ColumnName = "Status")]
public new string Status { get; set; }
public UserJournalStatusEnum Status { get; set; }
}
}

View File

@ -1,4 +1,5 @@
using SqlSugar;
using QYZH.InteractiveMagazine.Models.Enum;
namespace QYZH.InteractiveMagazine.Models.Entity
{
@ -38,13 +39,13 @@ namespace QYZH.InteractiveMagazine.Models.Entity
/// Default:
/// Nullable:True
/// </summary>
public string Type {get;set;}
public UserMedalTypeEnum Type {get;set;}
/// <summary>
/// Desc:状态: Awarded, Revoked
/// Default:Awarded
/// Nullable:False
/// </summary>
public string Status {get;set;}
public UserMedalStatusEnum Status {get;set;}
}
}

View File

@ -1,4 +1,5 @@
using SqlSugar;
using QYZH.InteractiveMagazine.Models.Enum;
namespace QYZH.InteractiveMagazine.Models.Entity
{
@ -67,14 +68,14 @@ namespace QYZH.InteractiveMagazine.Models.Entity
/// Default:Normal
/// Nullable:False
/// </summary>
public string Type { get; set; }
public UserPetTypeEnum Type { get; set; }
/// <summary>
/// Desc:状态: Inactive, Active, Sleeping
/// Default:Inactive
/// Nullable:False
/// </summary>
public new string Status { get; set; }
public UserPetStatusEnum Status { get; set; }
/// <summary>
/// 理解力

View File

@ -1,4 +1,5 @@
using SqlSugar;
using QYZH.InteractiveMagazine.Models.Enum;
namespace QYZH.InteractiveMagazine.Models.Entity
{
@ -39,14 +40,14 @@ namespace QYZH.InteractiveMagazine.Models.Entity
/// Default:Normal
/// Nullable:False
/// </summary>
public string Type { get; set; }
public UsersTypeEnum Type { get; set; }
/// <summary>
/// Desc:状态: Active, Disabled
/// Default:Active
/// Nullable:False
/// </summary>
public string Status { get; set; }
public UserStatusEnum Status { get; set; }
/// <summary>
/// Desc:微信OpenId
/// Default:

View File

@ -0,0 +1,20 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 管理员类型枚举
/// </summary>
public enum AdminUserTypeEnum
{
/// <summary>
/// 编辑员
/// </summary>
Editor = 2,
/// <summary>
/// 超级管理员
/// </summary>
SuperAdmin = 0,
/// <summary>
/// 超级管理员
/// </summary>
Admin = 1
}

View File

@ -0,0 +1,17 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 签到配置状态枚举
/// </summary>
public enum CheckInConfigStatusEnum
{
/// <summary>
/// 未激活
/// </summary>
Inactive = 0,
/// <summary>
/// 激活
/// </summary>
Active = 1
}

View File

@ -0,0 +1,16 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 签到配置类型枚举
/// </summary>
public enum CheckInConfigTypeEnum
{
/// <summary>
/// 每日签到
/// </summary>
Daily = 1,
/// <summary>
/// 连续签到
/// </summary>
Streak = 2
}

View File

@ -0,0 +1,12 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 签到记录状态枚举
/// </summary>
public enum CheckInRecordStatusEnum
{
/// <summary>
/// 成功
/// </summary>
Success = 1
}

View File

@ -0,0 +1,16 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 签到记录类型枚举
/// </summary>
public enum CheckInRecordTypeEnum
{
/// <summary>
/// 正常签到
/// </summary>
Normal = 1,
/// <summary>
/// 补签
/// </summary>
MakeUp = 2
}

View File

@ -0,0 +1,17 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 模板评论状态枚举
/// </summary>
public enum CommunityMessageCommentStatusEnum
{
/// <summary>
/// 已隐藏
/// </summary>
Hidden = 0,
/// <summary>
/// 已发布
/// </summary>
Published = 1
}

View File

@ -0,0 +1,12 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 评论类型枚举
/// </summary>
public enum CommunityMessageCommentTypeEnum
{
/// <summary>
/// 模板评论
/// </summary>
TemplateComment = 1
}

View File

@ -0,0 +1,12 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 点赞类型枚举
/// </summary>
public enum CommunityMessageLikeTypeEnum
{
/// <summary>
/// 点赞
/// </summary>
Like = 1
}

View File

@ -0,0 +1,17 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 固定模板言论状态枚举
/// </summary>
public enum CommunityTemplateSentenceStatusEnum
{
/// <summary>
/// 未激活
/// </summary>
Inactive = 0,
/// <summary>
/// 激活
/// </summary>
Active = 1
}

View File

@ -0,0 +1,20 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 固定模板言论分类枚举
/// </summary>
public enum CommunityTemplateSentenceTypeEnum
{
/// <summary>
/// 正面
/// </summary>
Positive = 1,
/// <summary>
/// 中性
/// </summary>
Neutral = 2,
/// <summary>
/// 负面
/// </summary>
Negative = 3
}

View File

@ -0,0 +1,32 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 补偿任务状态枚举
/// </summary>
public enum CompensationTaskStatusEnum
{
/// <summary>
/// 待处理
/// </summary>
Pending = 0,
/// <summary>
/// 处理中
/// </summary>
Processing = 1,
/// <summary>
/// 成功
/// </summary>
Success = 2,
/// <summary>
/// 失败
/// </summary>
Failed = 3,
/// <summary>
/// 已取消
/// </summary>
Cancelled = 4
}

View File

@ -0,0 +1,24 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 补偿任务类型枚举
/// </summary>
public enum CompensationTaskTypeEnum
{
/// <summary>
/// 宠物喂养补偿
/// </summary>
PetFeeding = 1,
/// <summary>
/// 用户积分补偿
/// </summary>
UserPoints = 2,
/// <summary>
/// 用户成长值补偿
/// </summary>
UserGrowth = 3,
/// <summary>
/// 发送通知补偿
/// </summary>
SendNotification = 4
}

View File

@ -0,0 +1,32 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 点读文件明细状态枚举
/// </summary>
public enum DotFileDetailStatusEnum
{
/// <summary>
/// 待处理
/// </summary>
Pending = 0,
/// <summary>
/// 处理中
/// </summary>
Processing = 1,
/// <summary>
/// 成功
/// </summary>
Success = 2,
/// <summary>
/// 失败
/// </summary>
Failed = 3,
/// <summary>
/// 已取消
/// </summary>
Cancelled = 4
}

View File

@ -0,0 +1,32 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 点读文件状态枚举
/// </summary>
public enum DotFileStatusEnum
{
/// <summary>
/// 待处理
/// </summary>
Pending = 0,
/// <summary>
/// 处理中
/// </summary>
Processing = 1,
/// <summary>
/// 成功
/// </summary>
Success = 2,
/// <summary>
/// 失败
/// </summary>
Failed = 3,
/// <summary>
/// 已取消
/// </summary>
Cancelled = 4
}

View File

@ -0,0 +1,17 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 兑换记录状态枚举
/// </summary>
public enum ExchangeRecordStatusEnum
{
/// <summary>
/// 成功
/// </summary>
Success = 1,
/// <summary>
/// 已退还
/// </summary>
Refunded = 2
}

View File

@ -0,0 +1,16 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 期刊目录类别枚举
/// </summary>
public enum JournalCatalogTypeEnum
{
/// <summary>
/// 单元
/// </summary>
Unit = 0,
/// <summary>
/// 页面
/// </summary>
Page = 1
}

View File

@ -0,0 +1,22 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 期刊页面状态枚举
/// </summary>
public enum JournalPageStatusEnum
{
/// <summary>
/// 验证失败
/// </summary>
Failed = -1,
/// <summary>
/// 未验证
/// </summary>
NotVerified = 0,
/// <summary>
/// 验证成功
/// </summary>
Success = 1
}

View File

@ -0,0 +1,24 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 杂志任务题型枚举
/// </summary>
public enum JournalPageTaskTypeEnum
{
/// <summary>
/// 单选题
/// </summary>
SingleChoice = 1,
/// <summary>
/// 多选题
/// </summary>
MultipleChoice = 2,
/// <summary>
/// 填空题
/// </summary>
FillInBlank = 3,
/// <summary>
/// 问答题
/// </summary>
QuestionAnswer = 4
}

View File

@ -0,0 +1,22 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 期刊状态枚举
/// </summary>
public enum JournalStatusEnum
{
/// <summary>
/// 草稿
/// </summary>
Draft = 0,
/// <summary>
/// 已发布
/// </summary>
Published = 1,
/// <summary>
/// 已归档
/// </summary>
Archived = 2
}

View File

@ -0,0 +1,16 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 期刊类型枚举
/// </summary>
public enum JournalTypeEnum
{
/// <summary>
/// 普通
/// </summary>
Normal = 1,
/// <summary>
/// 特刊
/// </summary>
Special = 2
}

View File

@ -0,0 +1,16 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 勋章类型枚举
/// </summary>
public enum MedalTypeEnum
{
/// <summary>
/// 宠物勋章
/// </summary>
Pet = 1,
/// <summary>
/// 社区勋章
/// </summary>
Community = 2
}

View File

@ -0,0 +1,22 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 社区消息状态枚举
/// </summary>
public enum MessageStatusEnum
{
/// <summary>
/// 审核中
/// </summary>
PendingReview = 0,
/// <summary>
/// 已通过
/// </summary>
Approved = 1,
/// <summary>
/// 已冻结
/// </summary>
Frozen = 2
}

View File

@ -0,0 +1,22 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 消息类型
/// </summary>
public enum MessageTypeEnum
{
/// <summary>
/// 文章
/// </summary>
Article = 1,
/// <summary>
/// 引用
/// </summary>
Quote = 2,
/// <summary>
/// 公告
/// </summary>
Announcement = 3
}

View File

@ -0,0 +1,17 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 宠物进化状态枚举
/// </summary>
public enum PetEvolutionStatusEnum
{
/// <summary>
/// 未激活
/// </summary>
Inactive = 0,
/// <summary>
/// 激活
/// </summary>
Active = 1
}

View File

@ -0,0 +1,16 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 宠物进化类型枚举
/// </summary>
public enum PetEvolutionTypeEnum
{
/// <summary>
/// 普通进化
/// </summary>
Normal = 1,
/// <summary>
/// 特殊进化
/// </summary>
Special = 2
}

View File

@ -0,0 +1,12 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 宠物喂养记录状态枚举
/// </summary>
public enum PetFeedingRecordStatusEnum
{
/// <summary>
/// 成功
/// </summary>
Success = 1
}

View File

@ -0,0 +1,16 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 宠物喂养记录类型枚举
/// </summary>
public enum PetFeedingRecordTypeEnum
{
/// <summary>
/// 普通喂养
/// </summary>
Normal = 1,
/// <summary>
/// 特殊喂养
/// </summary>
Special = 2
}

View File

@ -0,0 +1,16 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 宠物皮肤图片类型枚举
/// </summary>
public enum PetSkinImageTypeEnum
{
/// <summary>
/// 普通图片
/// </summary>
Normal = 1,
/// <summary>
/// 特殊图片
/// </summary>
Special = 2
}

View File

@ -0,0 +1,20 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 宠物皮肤类型枚举
/// </summary>
public enum PetSkinTypeEnum
{
/// <summary>
/// 普通皮肤
/// </summary>
Normal = 1,
/// <summary>
/// 限定皮肤
/// </summary>
Limited = 2,
/// <summary>
/// 活动皮肤
/// </summary>
Event = 3
}

View File

@ -0,0 +1,17 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 宠物模板状态枚举
/// </summary>
public enum PetTemplateStatusEnum
{
/// <summary>
/// 未激活
/// </summary>
Inactive = 0,
/// <summary>
/// 激活
/// </summary>
Active = 1
}

View File

@ -0,0 +1,20 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 宠物模板类型枚举
/// </summary>
public enum PetTemplateTypeEnum
{
/// <summary>
/// 普通
/// </summary>
Normal = 1,
/// <summary>
/// 特殊
/// </summary>
Special = 2,
/// <summary>
/// 限定
/// </summary>
Limited = 3
}

View File

@ -0,0 +1,52 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 积分变动类型
/// </summary>
public enum PointsChangeTypeEnum
{
/// <summary>
/// 签到奖励
/// </summary>
SignIn,
/// <summary>
/// 补签奖励
/// </summary>
MakeUpSign,
/// <summary>
/// 商城兑换扣除
/// </summary>
Exchange,
/// <summary>
/// 宠物喂养消耗
/// </summary>
FeedPet,
/// <summary>
/// 任务奖励(杂志任务等)
/// </summary>
TaskReward,
/// <summary>
/// 注册奖励
/// </summary>
RegisterBonus,
/// <summary>
/// 勋章奖励
/// </summary>
MedalBonus,
/// <summary>
/// 系统补偿
/// </summary>
SystemCompensation,
/// <summary>
/// 后台手动调整
/// </summary>
ManualAdjust
}

View File

@ -0,0 +1,17 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 积分流水分类
/// </summary>
public enum PointsFlowTypeEnum
{
/// <summary>
/// 收入
/// </summary>
Income,
/// <summary>
/// 支出
/// </summary>
Expense
}

View File

@ -0,0 +1,22 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 积分流水记录状态枚举
/// </summary>
public enum PointsRecordStatusEnum
{
/// <summary>
/// 待处理
/// </summary>
Pending = 0,
/// <summary>
/// 成功
/// </summary>
Success = 1,
/// <summary>
/// 失败
/// </summary>
Failed = 2
}

View File

@ -0,0 +1,16 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 商品类型枚举
/// </summary>
public enum ProductTypeEnum
{
/// <summary>
/// 补签卡
/// </summary>
MakeUpCard = 1,
/// <summary>
/// 宠物背景
/// </summary>
PetBg = 2
}

View File

@ -0,0 +1,17 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 用户背包状态枚举
/// </summary>
public enum UserBagStatusEnum
{
/// <summary>
/// 已过期
/// </summary>
Expired = 0,
/// <summary>
/// 可用
/// </summary>
Available = 1
}

View File

@ -0,0 +1,16 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 用户背包物品分类枚举
/// </summary>
public enum UserBagTypeEnum
{
/// <summary>
/// 补签卡
/// </summary>
MakeUpCard = 1,
/// <summary>
/// 宠物背景
/// </summary>
PetBg = 2
}

View File

@ -0,0 +1,17 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 用户期刊关联状态枚举
/// </summary>
public enum UserJournalStatusEnum
{
/// <summary>
/// 失效
/// </summary>
Inactive = 0,
/// <summary>
/// 正常
/// </summary>
Active = 1
}

View File

@ -0,0 +1,20 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 用户期刊关联类型枚举
/// </summary>
public enum UserJournalTypeEnum
{
/// <summary>
/// 已读
/// </summary>
Read = 1,
/// <summary>
/// 收藏
/// </summary>
Favorite = 2,
/// <summary>
/// 订阅
/// </summary>
Subscribe = 3
}

View File

@ -0,0 +1,17 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 用户勋章状态枚举
/// </summary>
public enum UserMedalStatusEnum
{
/// <summary>
/// 已撤销
/// </summary>
Revoked = 0,
/// <summary>
/// 已授予
/// </summary>
Awarded = 1
}

View File

@ -0,0 +1,16 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 用户勋章记录类型枚举
/// </summary>
public enum UserMedalTypeEnum
{
/// <summary>
/// 系统授予
/// </summary>
System = 1,
/// <summary>
/// 活动奖励
/// </summary>
Activity = 2
}

View File

@ -0,0 +1,22 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 用户宠物状态枚举
/// </summary>
public enum UserPetStatusEnum
{
/// <summary>
/// 未激活
/// </summary>
Inactive = 0,
/// <summary>
/// 激活
/// </summary>
Active = 1,
/// <summary>
/// 休眠中
/// </summary>
Sleeping = 2
}

View File

@ -0,0 +1,12 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 用户宠物类型枚举
/// </summary>
public enum UserPetTypeEnum
{
/// <summary>
/// 普通
/// </summary>
Normal = 1
}

View File

@ -11,7 +11,7 @@ public enum UserStatusEnum
Active = 1,
/// <summary>
/// 冻结
/// 禁用
/// </summary>
Frozen = 2
Disabled = 2
}

View File

@ -0,0 +1,16 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 用户类型枚举
/// </summary>
public enum UsersTypeEnum
{
/// <summary>
/// 普通用户
/// </summary>
Normal = 1,
/// <summary>
/// VIP用户
/// </summary>
VIP = 2
}