ApiRateLimit.cs 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. using System.ComponentModel.DataAnnotations;
  2. using System.ComponentModel.DataAnnotations.Schema;
  3. namespace Domain.Entities.Developers;
  4. /// <summary>
  5. /// 앱별 Rate limit override.
  6. /// 기본값(60/min) 이외 한도가 필요한 앱만 row 추가.
  7. /// </summary>
  8. public class ApiRateLimit
  9. {
  10. [ForeignKey(nameof(ApplicationID))]
  11. public virtual ApiApplication? Application { get; private set; }
  12. [Key]
  13. public int ID { get; private set; }
  14. public int ApplicationID { get; private set; }
  15. public int LimitPerMinute { get; private set; }
  16. public DateTime CreatedAt { get; private set; } = DateTime.UtcNow;
  17. public DateTime UpdatedAt { get; private set; } = DateTime.UtcNow;
  18. private ApiRateLimit() { }
  19. public static ApiRateLimit Create(int applicationID, int limitPerMinute)
  20. {
  21. return new ApiRateLimit
  22. {
  23. ApplicationID = applicationID,
  24. LimitPerMinute = limitPerMinute
  25. };
  26. }
  27. public void SetLimit(int limitPerMinute)
  28. {
  29. LimitPerMinute = limitPerMinute;
  30. UpdatedAt = DateTime.UtcNow;
  31. }
  32. }