package com.jeesharp.business.modules.member.dto;

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;

/**
 * 微信小程序「手机号一键登录」请求：需携带 {@code wx.login} 的 code 与 getPhoneNumber 的 {@code phoneCode}；
 * 可选携带用户头像昵称等（与 {@code wx.getUserProfile} / 旧版 {@code getUserInfo} 返回字段一致），用于落库会员资料。
 *
 * @author jeesharp
 * @since 2026-05-12
 */
@Data
@Schema(description = "微信小程序手机号一键登录请求")
public class LoginByWechatMiniPhoneDTO {

    @Schema(description = "wx.login 获取的登录凭证 code", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotBlank(message = "code不能为空")
    private String code;

    @Schema(description = "button open-type=getPhoneNumber 回调中的动态令牌 code（非加密串）", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotBlank(message = "phoneCode不能为空")
    private String phoneCode;

    @Schema(description = "邀请码")
    private String inviteCode;

    @Schema(description = "包括敏感数据在内的完整用户信息的签名，用于校验 rawData（与 rawData 同时传）")
    private String signature;

    @Schema(description = "不包括敏感信息的原始数据字符串，用于签名校验（与 signature 同时传）")
    private String rawData;

    @Schema(description = "加密的用户数据（与 iv 同时传，服务端用 sessionKey 解密得到昵称头像等）")
    private String encryptedData;

    @Schema(description = "加密算法的初始向量（与 encryptedData 同时传）")
    private String iv;
}
