Files
QYZH.InteractiveMagazine/QYZH.InteractiveMagazine.Models/Dto/WeChat/WeChatDto.cs
glz 028e3dfb34 refactor: 重构用户与勋章体系,统一状态管理与数据结构
1.  新增通用默认状态枚举 DefaultStatusEnum,替换原有分散的状态枚举
2.  重构用户体系:拆分 WxUser 独立表存储微信身份,Users 表改为角色子用户表并关联 WxUser
3.  重构勋章模块:新增系统/期刊勋章类型,调整 JournalId 为可空,新增勋章状态字段
4.  重构微信认证流程:基于 WxUser 生成 Token,支持多子用户管理
5.  清理冗余枚举文件,重构多处业务逻辑适配新的数据结构
6.  修复用户手机号关联逻辑,迁移手机号字段至 WxUser 表
2026-06-10 13:47:13 +08:00

254 lines
5.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using QYZH.InteractiveMagazine.Models.Enum;
using Newtonsoft.Json;
namespace QYZH.InteractiveMagazine.Models.WeChat;
/// <summary>
/// 微信小程序初次登录输入
/// </summary>
public class WeChatLoginInput
{
/// <summary>
/// 微信登录凭证wx.login 获取的 code
/// </summary>
public string Code { get; set; } = string.Empty;
/// <summary>
/// 手机号获取凭证getPhoneNumber 按钮回调中的 code可选
/// </summary>
public string? PhoneCode { get; set; }
}
/// <summary>
/// 微信小程序快捷登录输入(通过 OpenId 登录)
/// </summary>
public class WeChatQuickLoginInput
{
/// <summary>
/// 微信OpenId初次登录后客户端缓存的 OpenId
/// </summary>
public string OpenId { get; set; } = string.Empty;
}
/// <summary>
/// 微信登录输出(含微信用户信息 + 该微信下的 Users 列表)
/// </summary>
public class WeChatLoginOutput
{
/// <summary>
/// 访问令牌(基于 WxUser不绑定具体 User
/// </summary>
public string Token { get; set; } = string.Empty;
/// <summary>
/// 微信用户信息
/// </summary>
public WxUserInfoOutput WxUser { get; set; } = new();
/// <summary>
/// 该微信用户下的用户列表
/// </summary>
public List<WxUserOutput> Users { get; set; } = [];
}
/// <summary>
/// 微信用户信息输出WxUser 表数据)
/// </summary>
public class WxUserInfoOutput
{
/// <summary>
/// WxUser 主键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? Name { get; set; }
/// <summary>
/// 头像地址
/// </summary>
public string? AvatarUrl { get; set; }
/// <summary>
/// 手机号
/// </summary>
public string? Phone { get; set; }
}
/// <summary>
/// 用户输出Users 表数据,即角色/子用户)
/// </summary>
public class WxUserOutput
{
/// <summary>
/// Users 主键Id
/// </summary>
public long Id { get; set; }
/// <summary>
/// 关联 WxUserId
/// </summary>
public long WxUserId { get; set; }
/// <summary>
/// 昵称
/// </summary>
public string? NickName { get; set; }
/// <summary>
/// 头像地址
/// </summary>
public string? AvatarUrl { get; set; }
/// <summary>
/// 积分余额
/// </summary>
public int Points { get; set; }
/// <summary>
/// 当前成长值
/// </summary>
public int GrowthPoints { get; set; }
/// <summary>
/// 用户类型: Normal, VIP
/// </summary>
public string Type { get; set; } = string.Empty;
/// <summary>
/// 状态
/// </summary>
public string Status { get; set; } = string.Empty;
/// <summary>
/// 是否上次在线用户
/// </summary>
public bool IsLastOnline { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreatedAt { get; set; }
}
/// <summary>
/// 新增用户输入(在 WxUser 下创建子用户/角色)
/// </summary>
public class CreateChildUserInput
{
/// <summary>
/// 昵称
/// </summary>
public string Name { get; set; } = string.Empty;
/// <summary>
/// 头像地址(可选)
/// </summary>
public string? AvatarUrl { get; set; }
}
/// <summary>
/// 微信切换用户输入
/// </summary>
public class WeChatSwitchUserInput
{
/// <summary>
/// 目标用户IDUsers 表 Id
/// </summary>
public long UserId { get; set; }
}
/// <summary>
/// 微信切换用户输出JWT 基于 WxUser切换不更换 Token
/// </summary>
public class WeChatSwitchUserOutput
{
/// <summary>
/// 当前切换的用户详情
/// </summary>
public WxUserOutput User { get; set; } = new();
}
// ========== 微信 API 响应 DTO不变 ==========
/// <summary>
/// 微信 code2session 接口响应
/// </summary>
public class WxCode2SessionResponse
{
[JsonProperty("openid")]
public string? OpenId { get; set; }
[JsonProperty("session_key")]
public string? SessionKey { get; set; }
[JsonProperty("unionid")]
public string? UnionId { get; set; }
[JsonProperty("errcode")]
public int ErrCode { get; set; }
[JsonProperty("errmsg")]
public string? ErrMsg { get; set; }
}
/// <summary>
/// 微信获取手机号接口响应
/// </summary>
public class WxPhoneNumberResponse
{
[JsonProperty("errcode")]
public int ErrCode { get; set; }
[JsonProperty("errmsg")]
public string? ErrMsg { get; set; }
[JsonProperty("phone_info")]
public WxPhoneInfo? PhoneInfo { get; set; }
}
/// <summary>
/// 微信手机号信息
/// </summary>
public class WxPhoneInfo
{
[JsonProperty("phoneNumber")]
public string? PhoneNumber { get; set; }
[JsonProperty("purePhoneNumber")]
public string? PurePhoneNumber { get; set; }
[JsonProperty("countryCode")]
public string? CountryCode { get; set; }
}
/// <summary>
/// 微信 access_token 接口响应
/// </summary>
public class WxAccessTokenResponse
{
[JsonProperty("access_token")]
public string? AccessToken { get; set; }
[JsonProperty("expires_in")]
public int ExpiresIn { get; set; }
[JsonProperty("errcode")]
public int ErrCode { get; set; }
[JsonProperty("errmsg")]
public string? ErrMsg { get; set; }
}