Files
ASP.NET-CORE-web-test/Models/User.cs
2025-10-10 16:02:38 +08:00

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!;
}
}