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 System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WiDAL.CustomCode.WiStepContent; using WiDAL.DTOs; namespace WiBLL.WiStepContent { public class WiStepContentBLL : IWiStepContentBLL { private readonly IWiStepContentDAL _dal; private readonly AutoNumber _autoNumber; private readonly IValidation _validation; public WiStepContentBLL(IWiStepContentDAL dal, AutoNumber autoNumber, IValidation validation) { _dal = dal; _autoNumber = autoNumber; _validation = validation; } public async Task GetById(int WiStepContentId, LoginDTO login, CancellationToken ct) => await _dal.GetById(WiStepContentId, login, ct).ConfigureAwait(false); public async Task Save(WiStepContentDTO dto, LoginDTO login, CancellationToken ct) { if (dto == null) throw new ArgumentNullException(nameof(dto)); AutoNumberDTO? autoNumberDTO = null; try { bool isNew = dto.WiStepContentId == 0; if (isNew) { autoNumberDTO = await _autoNumber.GetNumberAsync(1, "WISTEPCONTENT", login); dto.WiStepContentId = autoNumberDTO.StartNumber; } // ✅ pass isNew to DAL await _dal.Save(dto, isNew, login, ct); return isNew ? $"{SuccessResponse.SaveSuccess}" : $"{SuccessResponse.UpdateSuccess}"; } catch { if (autoNumberDTO != null && dto.WiStepContentId > 0) { await _autoNumber.RollbackAutoNumber("WISTEPCONTENT", dto.WiStepContentId, login); } throw; } } public async Task GetSelectListWiStepContent(CriteriaDTO criteriaDTO, LoginDTO login, CancellationToken ct) => await _dal.GetSelectListWiStepContent(criteriaDTO, login, ct); public async Task DeleteWiStepContent(int WiStepContentId, LoginDTO loginDTO) { try { return await _dal.DeleteWiStepContent(WiStepContentId, loginDTO); } catch (Exception) { throw; } } } }