using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.Resource.Response; using GB5Shared.Validation; using SkillManagementDAL.CustomCode.SkillDomain; using SkillManagementDAL.DTO.SkillDomain; namespace SkillManagementBLL.SkillDomain { public class SkillDomainBLL : ISkillDomainBLL { private readonly ISkillDomainDAL _dal; private readonly AutoNumber _autoNumber; private readonly IValidation _validation; public SkillDomainBLL(ISkillDomainDAL dal, AutoNumber autoNumber, IValidation validation) { _dal = dal; _autoNumber = autoNumber; _validation = validation; } public async Task GetList(LoginDTO login, CancellationToken ct) => await _dal.GetList(login, ct); public async Task GetById(int domainId, LoginDTO login, CancellationToken ct) => await _dal.GetById(domainId, login, ct); public async Task GetSelectList(CriteriaDTO criteriaDTO, LoginDTO login, CancellationToken ct) => await _dal.GetSelectList(criteriaDTO, login, ct); public async Task Save(SkillDomainDTO dto, LoginDTO login, CancellationToken ct) { await _validation.NotEmpty(dto.DomainCode, nameof(dto.DomainCode)); await _validation.NotEmpty(dto.DomainName, nameof(dto.DomainName)); if (dto.DomainType > 4) throw new ArgumentException("DomainType must be 0-4 (Manufacturing/Quality/Maintenance/General/Support)"); dto.TenantId = login.ClientId; dto.ModifiedById = login.UserId; bool isNew = dto.DomainId == 0; GB5Shared.DTO.Framework.AutoNumber.AutoNumberDTO? an = null; try { if (isNew) { an = await _autoNumber.GetNumberAsync(1, "MSKILLDOMAIN", login); dto.DomainId = an.StartNumber; dto.CreatedById = login.UserId; await _dal.Insert(dto, login, ct); return string.Format(SuccessResponse.SaveSuccessWithCodeAndName, dto.DomainCode, dto.DomainName); } else { await _dal.Update(dto, login, ct); return string.Format(SuccessResponse.UpdateSuccessWithCodeAndName, dto.DomainCode, dto.DomainName); } } catch { if (isNew && an != null) await _autoNumber.RollbackAutoNumber("MSKILLDOMAIN", an.StartNumber, login); throw; } } public async Task Delete(int domainId, LoginDTO loginDTO) { var result = await _dal.DeleteSkillDomain(domainId, loginDTO); if (result == ErrorResponse.DeleteNotFoundMessage) throw new Exception(result); return result; } } }