EmailVerifyToken.cs 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. using Domain.Entities.EmailVerification.ValueObject;
  2. namespace Domain.Entities.EmailVerification
  3. {
  4. public class EmailVerifyToken
  5. {
  6. public int ID { get; private set; }
  7. public VerificationType Type { get; private set; }
  8. public string Email { get; private set; } = default!;
  9. public string Token { get; private set; } = default!;
  10. public bool IsVerified { get; private set; } = false;
  11. public DateTime Expiration { get; private set; }
  12. public string? Additional { get; private set; }
  13. public DateTime CreatedAt { get; private set; } = DateTime.UtcNow;
  14. public AdditionalData? AdditionalData
  15. {
  16. get => Additional == null ? null : System.Text.Json.JsonSerializer.Deserialize<AdditionalData>(Additional);
  17. set => Additional = value == null ? null : System.Text.Json.JsonSerializer.Serialize(value);
  18. }
  19. private EmailVerifyToken() { }
  20. private EmailVerifyToken(VerificationType type, string email, string token, DateTime expiration, AdditionalData? additionalData)
  21. {
  22. if (string.IsNullOrWhiteSpace(email))
  23. {
  24. throw new ArgumentException("Email is required.", nameof(email));
  25. }
  26. if (email.Length > 60)
  27. {
  28. throw new ArgumentOutOfRangeException(nameof(email));
  29. }
  30. if (string.IsNullOrWhiteSpace(token))
  31. {
  32. throw new ArgumentException("Token is required.", nameof(token));
  33. }
  34. if (token.Length > 256)
  35. {
  36. throw new ArgumentOutOfRangeException(nameof(token));
  37. }
  38. Type = type;
  39. Email = email;
  40. Token = token;
  41. Expiration = expiration;
  42. AdditionalData = additionalData;
  43. CreatedAt = DateTime.UtcNow;
  44. }
  45. public static EmailVerifyToken Create(VerificationType type, string email, string token, DateTime expiration, AdditionalData? additionalData = null)
  46. {
  47. return new(type, email, token, expiration, additionalData);
  48. }
  49. public void MarkVerified()
  50. {
  51. IsVerified = true;
  52. }
  53. }
  54. }