56 lines
2.0 KiB
C#
56 lines
2.0 KiB
C#
using System.ComponentModel.DataAnnotations;
|
|
using System.ComponentModel.DataAnnotations.Schema;
|
|
|
|
namespace SimpleTodoApiWithPg.Models
|
|
{
|
|
public class User
|
|
{
|
|
[Key] // 标识 Id 为主键
|
|
//[DatabaseGenerated(DatabaseGeneratedOption.Identity)] // 数据库自动生成(例如 PostgreSQL 的 SERIAL 类型)
|
|
public Guid Id { get; set; } = Guid.CreateVersion7();
|
|
|
|
[Required] // 标识为非空字段
|
|
[MaxLength(50)] // 限制字符串最大长度
|
|
public string Username { get; set; } = null!;
|
|
|
|
[Required(ErrorMessage = "邮箱是必填项。")]
|
|
[EmailAddress(ErrorMessage = "邮箱格式不正确。")] //
|
|
[StringLength(50, MinimumLength = 5, ErrorMessage = "邮箱长度必须在 {2} 到 {1} 个字符之间。")] //
|
|
public string Email { get; set; } = null!;
|
|
|
|
// 密码通常会存储哈希值,而不是明文
|
|
[Required]
|
|
[MaxLength(100)]
|
|
public string PasswordHash { get; set; } = null!;
|
|
|
|
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
|
|
|
// 如果需要,可以添加导航属性,例如,一个用户可以有多个 Todo
|
|
// public ICollection<Todo> Todos { get; set; } = new List<Todo>();
|
|
}
|
|
|
|
public class RefreshToken
|
|
{
|
|
[Key]
|
|
public Guid Id { get; set; } = Guid.CreateVersion7();
|
|
|
|
[Required]
|
|
public string Token { get; set; } = null!; // 存储 refresh token 的字符串
|
|
|
|
[Required]
|
|
public DateTime Expires { get; set; } // 过期时间
|
|
|
|
public bool IsExpired => DateTime.UtcNow >= Expires; // 计算属性,判断是否已过期
|
|
|
|
public DateTime Created { get; set; } // 创建时间
|
|
|
|
public DateTime? Revoked { get; set; } // 撤销时间 (可空)
|
|
|
|
public bool IsActive => Revoked == null && !IsExpired; // 计算属性,判断是否有效
|
|
|
|
// 外键关联到 User 表
|
|
public Guid UserId { get; set; }
|
|
[ForeignKey("UserId")]
|
|
public User User { get; set; } = null!;
|
|
}
|
|
} |