using System.ComponentModel.DataAnnotations; namespace Store.Users.Contracts.Dtos; /// 资金请求;DTO 检查输入,服务区分积分/余额操作并校验权限。 public sealed class UserFundsRequest : IValidatableObject { [Required(ErrorMessage = "目标账户不能为空"), StringLength(20)] public string UserName { get; set; } = ""; [Required(ErrorMessage = "请求号不能为空"), StringLength(64)] public string RequestId { get; set; } = ""; [Range(typeof(decimal), "0.01", "1000000")] public decimal Amount { get; set; } /// 积分支持充值、转移;余额支持充值、消费。 [Required(ErrorMessage = "操作类型不能为空"), StringLength(20)] public string Operation { get; set; } = ""; [StringLength(255)] public string? Remark { get; set; } public IEnumerable Validate(ValidationContext validationContext) { if (decimal.Round(Amount, 2) != Amount) yield return new ValidationResult("金额最多保留两位小数", [nameof(Amount)]); } } public sealed record UserFundsResponse(string UserName, decimal Value, string RequestId);