using GB5Shared.DTO.Framework.AutoNumber; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.Resource.Response; using GB5Shared.Validation; using WiDAL.CustomCode.WiSkillRequirement; using WiDAL.DTOs; namespace WiBLL.WiSkillRequirement { public class WiSkillRequirementBLL : IWiSkillRequirementBLL { private readonly IWiSkillRequirementDAL _dal; private readonly AutoNumber _autoNumber; private readonly IValidation _validation; public WiSkillRequirementBLL(IWiSkillRequirementDAL dal, AutoNumber autoNumber, IValidation validation) { _dal = dal; _autoNumber = autoNumber; _validation = validation; } public async Task GetById(int WiSkillRequirementId, LoginDTO login, CancellationToken ct) => await _dal.GetById(WiSkillRequirementId, login, ct).ConfigureAwait(false); public async Task Save(WiSkillRequirementDTO dto, LoginDTO login, CancellationToken ct) { if (dto == null) throw new ArgumentNullException(nameof(dto)); AutoNumberDTO? autoNumberDTO = null; try { bool isNew = dto.WiSkillRequirementId == 0; if (isNew) { autoNumberDTO = await _autoNumber.GetNumberAsync(1, "WISKILLREQUIREMENT", login); dto.WiSkillRequirementId = autoNumberDTO.StartNumber; } // ✅ pass isNew to DAL await _dal.Save(dto, isNew, login, ct); return isNew ? $"{SuccessResponse.SaveSuccess}" : $"{SuccessResponse.UpdateSuccess}"; } catch { if (autoNumberDTO != null && dto.WiSkillRequirementId > 0) { await _autoNumber.RollbackAutoNumber("WISKILLREQUIREMENT", dto.WiSkillRequirementId, login); } throw; } } public async Task GetSelectListWiSkillRequirement(CriteriaDTO criteriaDTO, LoginDTO login, CancellationToken ct) => await _dal.GetSelectListWiSkillRequirement(criteriaDTO, login, ct); public async Task DeleteWiSkillRequirement(int WiSkillRequirementId, LoginDTO loginDTO) { try { return await _dal.DeleteWiSkillRequirement(WiSkillRequirementId, loginDTO); } catch (Exception) { throw; } } } }