using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.Resource.Response; using GB5Shared.Validation; using KmsDAL.CustomCode.KmDomain; using KmsDAL.DTO.KmDomain; namespace KmsBLL.KmDomain { public class KmDomainBLL : IKmDomainBLL { private readonly IKmDomainDAL _dal; private readonly AutoNumber _autoNumber; private readonly IValidation _validation; public KmDomainBLL(IKmDomainDAL dal, AutoNumber autoNumber, IValidation validation) { _dal = dal; _autoNumber = autoNumber; _validation = validation; } public async Task GetKmDomain(int domainId, LoginDTO login, CancellationToken ct) => await _dal.GetKmDomain(domainId, login, ct); public async Task GetSelectListKmDomain(LoginDTO login, CancellationToken ct) => await _dal.GetSelectListKmDomain(login, ct); public async Task GetSelectListKmDomainBySpace(int spaceId, LoginDTO login, CancellationToken ct) => await _dal.GetSelectListKmDomainBySpace(spaceId, login, ct); public async Task SaveKmDomain(KmDomainDTO dto, LoginDTO login, CancellationToken ct) { await _validation.NotEmpty(dto.DomainCode, nameof(dto.DomainCode)); await _validation.NotEmpty(dto.DomainName, nameof(dto.DomainName)); var duplicateCount = await _dal.GetKmDomainCodeCount(dto.DomainCode, dto.DomainId, login, ct); if (duplicateCount > 0) throw new InvalidOperationException($"Domain code '{dto.DomainCode}' already exists."); dto.TenantId = login.ClientId; bool isNew = dto.DomainId == 0; if (isNew) { var autoNum = await _autoNumber.GetNumberAsync(1, "KMDOMAIN", login); dto.DomainId = autoNum.StartNumber; dto.CreatedById = login.UserId; dto.ModifiedById = login.UserId; await _dal.SaveKmDomain(dto, login, ct); return $"{SuccessResponse.SaveSuccessMessage} {dto.DomainId}"; } else { dto.ModifiedById = login.UserId; await _dal.UpdateKmDomain(dto, login, ct); return $"{SuccessResponse.UpdateSuccessMessage} {dto.DomainId}"; } } public async Task DeleteKmDomain(int domainId, LoginDTO login, CancellationToken ct) { await _dal.DeleteKmDomain(domainId, login, ct); return SuccessResponse.DeleteSuccessMessage; } } }