EmailVerifyToken.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using Microsoft.EntityFrameworkCore;
  2. using System.ComponentModel.DataAnnotations.Schema;
  3. using System.ComponentModel.DataAnnotations;
  4. using bitforum.Constants;
  5. namespace bitforum.Models.Account
  6. {
  7. [Table("EmailVerifyToken")]
  8. [Comment("이메일 인증 토큰들")]
  9. [Index(nameof(Type), Name = "IX_EmailVerifyToken_Type")]
  10. [Index(nameof(Email), Name = "IX_EmailVerifyToken_Email")]
  11. [Index(nameof(Token), Name = "IX_EmailVerifyToken_Token")]
  12. [Index(nameof(IsVerified), Name = "IX_EmailVerifyToken_IsVerified")]
  13. [Index(nameof(Expiration), Name = "IX_EmailVerifyToken_Expiration")]
  14. public class EmailVerifyToken
  15. {
  16. [Key]
  17. [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
  18. [Comment("PK")]
  19. public int ID { get; set; }
  20. [Comment("인증 유형 (이메일 인증 / 비밀번호 재설정)")]
  21. public required VerificationType Type { get; set; }
  22. [Comment("이메일")]
  23. [MaxLength(60)]
  24. public required string Email { get; set; }
  25. [Comment("Token")]
  26. [MaxLength(256)]
  27. public required string Token { get; set; }
  28. [Comment("인증 여부")]
  29. public bool IsVerified { get; set; } = false;
  30. [Comment("만료 일시")]
  31. public required DateTime Expiration { get; set; }
  32. [Comment("추가 정보(JSON)")]
  33. public string? Additional { get; set; } = null;
  34. [Comment("등록 일시")]
  35. public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
  36. [NotMapped]
  37. public AdditionalData? AdditionalData
  38. {
  39. get => Additional == null ? null : System.Text.Json.JsonSerializer.Deserialize<AdditionalData>(Additional);
  40. set => Additional = value == null ? null : System.Text.Json.JsonSerializer.Serialize(value);
  41. }
  42. }
  43. }