| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- using System.ComponentModel.DataAnnotations;
- namespace Domain.Entities.Store;
- /// <summary>게임 카테고리 코드 (관리형). 게임과 N:M (GameCategoryMap).</summary>
- public class GameCategory
- {
- [Key]
- public int ID { get; private set; }
- public string KorName { get; private set; } = default!;
- public string? EngName { get; private set; }
- public int Order { get; private set; }
- public bool IsActive { get; private set; } = true;
- public DateTime CreatedAt { get; private set; } = DateTime.UtcNow;
- public DateTime? UpdatedAt { get; private set; }
- public virtual List<GameCategoryMap> GameCategoryMap { get; private set; } = [];
- private GameCategory() { }
- public static GameCategory Create(string korName, string? engName = null, int order = 0, bool isActive = true)
- {
- Validate(korName, engName);
- return new GameCategory
- {
- KorName = korName.Trim(),
- EngName = string.IsNullOrWhiteSpace(engName) ? null : engName.Trim(),
- Order = order,
- IsActive = isActive
- };
- }
- public void Update(string korName, string? engName, int order, bool isActive)
- {
- Validate(korName, engName);
- KorName = korName.Trim();
- EngName = string.IsNullOrWhiteSpace(engName) ? null : engName.Trim();
- Order = order;
- IsActive = isActive;
- UpdatedAt = DateTime.UtcNow;
- }
- private static void Validate(string korName, string? engName)
- {
- if (string.IsNullOrWhiteSpace(korName))
- {
- throw new ArgumentException("KorName is required.", nameof(korName));
- }
- if (korName.Length > 100)
- {
- throw new ArgumentOutOfRangeException(nameof(korName), "KorName 은 100자 이하로 입력하세요.");
- }
- if (engName is not null && engName.Length > 100)
- {
- throw new ArgumentOutOfRangeException(nameof(engName), "EngName 은 100자 이하로 입력하세요.");
- }
- }
- }
|