GameLanguage.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using System.ComponentModel.DataAnnotations;
  2. namespace Domain.Entities.Store;
  3. /// <summary>게임 지원 언어 마스터 (관리형). 게임별 지원 항목은 GameLanguageSupport.</summary>
  4. public class GameLanguage
  5. {
  6. [Key]
  7. public int ID { get; private set; }
  8. public string KorName { get; private set; } = default!;
  9. public string? EngName { get; private set; }
  10. public int Order { get; private set; }
  11. public bool IsActive { get; private set; } = true;
  12. public DateTime CreatedAt { get; private set; } = DateTime.UtcNow;
  13. public DateTime? UpdatedAt { get; private set; }
  14. public virtual List<GameLanguageSupport> GameLanguageSupport { get; private set; } = [];
  15. private GameLanguage() { }
  16. public static GameLanguage Create(string korName, string? engName = null, int order = 0, bool isActive = true)
  17. {
  18. Validate(korName, engName);
  19. return new GameLanguage
  20. {
  21. KorName = korName.Trim(),
  22. EngName = string.IsNullOrWhiteSpace(engName) ? null : engName.Trim(),
  23. Order = order,
  24. IsActive = isActive
  25. };
  26. }
  27. public void Update(string korName, string? engName, int order, bool isActive)
  28. {
  29. Validate(korName, engName);
  30. KorName = korName.Trim();
  31. EngName = string.IsNullOrWhiteSpace(engName) ? null : engName.Trim();
  32. Order = order;
  33. IsActive = isActive;
  34. UpdatedAt = DateTime.UtcNow;
  35. }
  36. private static void Validate(string korName, string? engName)
  37. {
  38. if (string.IsNullOrWhiteSpace(korName))
  39. {
  40. throw new ArgumentException("KorName is required.", nameof(korName));
  41. }
  42. if (korName.Length > 100)
  43. {
  44. throw new ArgumentOutOfRangeException(nameof(korName), "KorName 은 100자 이하로 입력하세요.");
  45. }
  46. if (engName is not null && engName.Length > 100)
  47. {
  48. throw new ArgumentOutOfRangeException(nameof(engName), "EngName 은 100자 이하로 입력하세요.");
  49. }
  50. }
  51. }