EmailVerifyToken.cs 2.0 KB

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