refactor: 重构项目基础架构与实体体系
- 替换原有自定义生命周期接口为通用基础服务体系 - 将所有实体基类替换为带雪花ID的SqlSugarBaseEntity - 迁移DTO到Models项目并统一管理 - 移除冗余的Repository层实现,改用通用基础服务 - 添加Yitter.IdGenerator雪花ID生成支持 - 重构SqlSugar数据库上下文与依赖注入配置 - 新增微信用户、用户勋章、背包等实体与配套服务 - 整理分页查询与结果封装类 - 优化WebApi控制器结构
This commit is contained in:
96
QYZH.InteractiveMagazine.Models/Dto/Admin/AdminUserDto.cs
Normal file
96
QYZH.InteractiveMagazine.Models/Dto/Admin/AdminUserDto.cs
Normal file
@ -0,0 +1,96 @@
|
||||
using QYZH.InteractiveMagazine.Models.Dto;
|
||||
|
||||
namespace QYZH.InteractiveMagazine.Models.Dto;
|
||||
|
||||
/// <summary>
|
||||
/// 管理员创建/更新输入
|
||||
/// </summary>
|
||||
public class AdminUserInput
|
||||
{
|
||||
/// <summary>
|
||||
/// 用户名
|
||||
/// </summary>
|
||||
public string UserName { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 密码(创建时必填,更新时为空表示不修改密码)
|
||||
/// </summary>
|
||||
public string? Password { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 管理员类型: SuperAdmin, Editor
|
||||
/// </summary>
|
||||
public string Type { get; set; } = "Editor";
|
||||
|
||||
/// <summary>
|
||||
/// 状态: Active, Inactive
|
||||
/// </summary>
|
||||
public string Status { get; set; } = "Active";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 管理员输出
|
||||
/// </summary>
|
||||
public class AdminUserOutput
|
||||
{
|
||||
/// <summary>
|
||||
/// 主键ID
|
||||
/// </summary>
|
||||
public long Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 用户名
|
||||
/// </summary>
|
||||
public string UserName { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 管理员类型
|
||||
/// </summary>
|
||||
public string Type { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 状态
|
||||
/// </summary>
|
||||
public string Status { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 创建人
|
||||
/// </summary>
|
||||
public string? CreatedBy { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
public DateTime CreatedAt { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 更新人
|
||||
/// </summary>
|
||||
public string? UpdatedBy { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 更新时间
|
||||
/// </summary>
|
||||
public DateTime? UpdatedAt { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 管理员分页查询输入
|
||||
/// </summary>
|
||||
public class AdminUserQueryInput : PageQueryModel
|
||||
{
|
||||
/// <summary>
|
||||
/// 用户名(模糊查询)
|
||||
/// </summary>
|
||||
public string? UserName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 管理员类型
|
||||
/// </summary>
|
||||
public string? Type { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 状态
|
||||
/// </summary>
|
||||
public string? Status { get; set; }
|
||||
}
|
||||
40
QYZH.InteractiveMagazine.Models/Dto/Admin/AuthDto.cs
Normal file
40
QYZH.InteractiveMagazine.Models/Dto/Admin/AuthDto.cs
Normal file
@ -0,0 +1,40 @@
|
||||
namespace QYZH.InteractiveMagazine.Models.Dto;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 管理员登录输入
|
||||
/// </summary>
|
||||
public class AdminLoginInput
|
||||
{
|
||||
/// <summary>
|
||||
/// 用户名
|
||||
/// </summary>
|
||||
public string UserName { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 密码
|
||||
/// </summary>
|
||||
public string Password { get; set; } = string.Empty;
|
||||
}
|
||||
|
||||
public class AdminLoginOutput
|
||||
{
|
||||
public string Token { get; set; } = string.Empty;
|
||||
|
||||
public long UserId { get; set; }
|
||||
|
||||
public string UserName { get; set; } = string.Empty;
|
||||
|
||||
public string Type { get; set; } = string.Empty;
|
||||
}
|
||||
|
||||
public class AdminUserInfoOutput
|
||||
{
|
||||
public long UserId { get; set; }
|
||||
|
||||
public string UserName { get; set; } = string.Empty;
|
||||
|
||||
public string Type { get; set; } = string.Empty;
|
||||
|
||||
public string Status { get; set; } = string.Empty;
|
||||
}
|
||||
@ -1,33 +1,73 @@
|
||||
namespace QYZH.InteractiveMagazine.Models.Dto;
|
||||
|
||||
/// <summary>
|
||||
/// 分页输出
|
||||
/// 通用分页信息类
|
||||
/// </summary>
|
||||
/// <typeparam name="T">数据类型</typeparam>
|
||||
public class PageListModel<T>
|
||||
{
|
||||
/// <summary>
|
||||
/// 页码
|
||||
/// 每页行数
|
||||
/// </summary>
|
||||
public int PageIndex { get; set; }
|
||||
|
||||
public int PageSize { get; set; } = 10;
|
||||
/// <summary>
|
||||
/// 每页条数
|
||||
/// 当前页
|
||||
/// </summary>
|
||||
public int PageSize { get; set; }
|
||||
|
||||
public int PageIndex { get; set; } = 1;
|
||||
/// <summary>
|
||||
/// 总记录数
|
||||
/// </summary>
|
||||
public long TotalCount { get; set; }
|
||||
|
||||
public int TotalNum { get; set; }
|
||||
/// <summary>
|
||||
/// 总页数
|
||||
/// </summary>
|
||||
public int TotalPages => PageSize > 0 ? (int)Math.Ceiling((double)TotalCount / PageSize) : 0;
|
||||
public int TotalPage
|
||||
{
|
||||
get
|
||||
{
|
||||
if (TotalNum > 0)
|
||||
return TotalNum % PageSize == 0 ? TotalNum / PageSize : TotalNum / PageSize + 1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public List<T> Result { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 数据列表
|
||||
/// 额外数据
|
||||
/// </summary>
|
||||
public List<T>? List { get; set; }
|
||||
public Dictionary<string, object> Extra { get; set; } = new Dictionary<string, object>();
|
||||
/// <summary>
|
||||
/// 是否有上一页
|
||||
/// </summary>
|
||||
public bool HasPrev
|
||||
{
|
||||
get
|
||||
{
|
||||
return PageIndex > 1;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 下一页是否可用
|
||||
/// </summary>
|
||||
public bool HasNext
|
||||
{
|
||||
get
|
||||
{
|
||||
return TotalPage > PageIndex;
|
||||
}
|
||||
}
|
||||
|
||||
public PageListModel()
|
||||
{
|
||||
}
|
||||
|
||||
public PageListModel(List<T> result, int pageIndex, int pageSize, int totalNum)
|
||||
{
|
||||
PageIndex = pageIndex;
|
||||
PageSize = pageSize;
|
||||
TotalNum = totalNum;
|
||||
Result = result;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,27 +1,57 @@
|
||||
namespace QYZH.InteractiveMagazine.Models.Dto;
|
||||
|
||||
/// <summary>
|
||||
/// 分页查询输入
|
||||
/// 通用分页查询类
|
||||
/// </summary>
|
||||
public class PageQueryModel
|
||||
{
|
||||
/// <summary>
|
||||
/// 页码,默认1
|
||||
///当前页
|
||||
/// </summary>
|
||||
public int PageIndex { get; set; } = 1;
|
||||
|
||||
/// <summary>
|
||||
/// 每页条数,默认10
|
||||
///每页条数
|
||||
/// </summary>
|
||||
public int PageSize { get; set; } = 10;
|
||||
|
||||
/// <summary>
|
||||
/// 排序字段
|
||||
/// </summary>
|
||||
public string? SortField { get; set; }
|
||||
public string Sort { get; set; } = string.Empty;
|
||||
/// <summary>
|
||||
/// 排序类型,前端传入的是"ascending","descending"
|
||||
/// </summary>
|
||||
public string SortType { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 排序方式(asc/desc)
|
||||
/// 关键字
|
||||
/// </summary>
|
||||
public string? SortOrder { get; set; }
|
||||
public string? KeyWord { get; set; }
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 分页查询泛型类
|
||||
/// </summary>
|
||||
/// <typeparam name="T">查询参数类型</typeparam>
|
||||
public class PageQueryModel<T> : PageQueryModel where T : class, new()
|
||||
{
|
||||
/// <summary>
|
||||
/// 查询参数
|
||||
/// </summary>
|
||||
public T Params { get; set; } = new T();
|
||||
|
||||
public TP ConvertTo<TP>() where TP : class
|
||||
{
|
||||
if (Params != null)
|
||||
{
|
||||
return Params as TP;
|
||||
}
|
||||
return default;
|
||||
}
|
||||
|
||||
public int Start => (PageIndex - 1) * PageSize + 1;
|
||||
|
||||
public int End => PageIndex * PageSize;
|
||||
}
|
||||
|
||||
198
QYZH.InteractiveMagazine.Models/Dto/WeChat/WeChatDto.cs
Normal file
198
QYZH.InteractiveMagazine.Models/Dto/WeChat/WeChatDto.cs
Normal file
@ -0,0 +1,198 @@
|
||||
using QYZH.InteractiveMagazine.Models.Dto;
|
||||
|
||||
namespace QYZH.InteractiveMagazine.IService.Dto;
|
||||
|
||||
/// <summary>
|
||||
/// 微信登录输出
|
||||
/// </summary>
|
||||
public class WeChatLoginOutput
|
||||
{
|
||||
/// <summary>
|
||||
/// 访问令牌
|
||||
/// </summary>
|
||||
public string Token { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 用户ID
|
||||
/// </summary>
|
||||
public long UserId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 用户名
|
||||
/// </summary>
|
||||
public string UserName { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 微信OpenId
|
||||
/// </summary>
|
||||
public string OpenId { get; set; } = string.Empty;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 微信用户创建/更新输入
|
||||
/// </summary>
|
||||
public class WxUserInput
|
||||
{
|
||||
/// <summary>
|
||||
/// 微信OpenId
|
||||
/// </summary>
|
||||
public string OpenId { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 微信UnionId
|
||||
/// </summary>
|
||||
public string? UnionId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 昵称
|
||||
/// </summary>
|
||||
public string? NickName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 头像地址
|
||||
/// </summary>
|
||||
public string? AvatarUrl { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 手机号
|
||||
/// </summary>
|
||||
public string? Phone { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 积分余额
|
||||
/// </summary>
|
||||
public int Points { get; set; } = 0;
|
||||
|
||||
/// <summary>
|
||||
/// 用户类型: Normal, VIP
|
||||
/// </summary>
|
||||
public string Type { get; set; } = "Normal";
|
||||
|
||||
/// <summary>
|
||||
/// 状态: Active, Disabled
|
||||
/// </summary>
|
||||
public string Status { get; set; } = "Active";
|
||||
|
||||
/// <summary>
|
||||
/// 密码,默认手机后4位
|
||||
/// </summary>
|
||||
public string? Pwd { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 当前成长值
|
||||
/// </summary>
|
||||
public int GrowthPoints { get; set; } = 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 微信用户输出
|
||||
/// </summary>
|
||||
public class WxUserOutput
|
||||
{
|
||||
/// <summary>
|
||||
/// 主键ID
|
||||
/// </summary>
|
||||
public long Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 微信OpenId
|
||||
/// </summary>
|
||||
public string OpenId { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 微信UnionId
|
||||
/// </summary>
|
||||
public string? UnionId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 昵称
|
||||
/// </summary>
|
||||
public string? NickName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 头像地址
|
||||
/// </summary>
|
||||
public string? AvatarUrl { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 手机号
|
||||
/// </summary>
|
||||
public string? Phone { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 积分余额
|
||||
/// </summary>
|
||||
public int Points { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 用户类型
|
||||
/// </summary>
|
||||
public string Type { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 状态
|
||||
/// </summary>
|
||||
public string Status { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 当前成长值
|
||||
/// </summary>
|
||||
public int GrowthPoints { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 创建人
|
||||
/// </summary>
|
||||
public string? CreatedBy { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
public DateTime CreatedAt { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 更新人
|
||||
/// </summary>
|
||||
public string? UpdatedBy { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 更新时间
|
||||
/// </summary>
|
||||
public DateTime? UpdatedAt { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 微信用户分页查询输入
|
||||
/// </summary>
|
||||
public class WxUserQueryInput : PageQueryModel
|
||||
{
|
||||
/// <summary>
|
||||
/// 昵称(模糊查询)
|
||||
/// </summary>
|
||||
public string? NickName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 手机号(模糊查询)
|
||||
/// </summary>
|
||||
public string? Phone { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 用户类型
|
||||
/// </summary>
|
||||
public string? Type { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 状态
|
||||
/// </summary>
|
||||
public string? Status { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 微信手机号获取输出
|
||||
/// </summary>
|
||||
public class WeChatPhoneNumberOutput
|
||||
{
|
||||
/// <summary>
|
||||
/// 手机号
|
||||
/// </summary>
|
||||
public string PhoneNumber { get; set; } = string.Empty;
|
||||
}
|
||||
Reference in New Issue
Block a user