using ComplianceDAL.CustomCode.GSPConfig; using ComplianceDAL.DTO.GSPConfig; using GB5Shared.DaprCache; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.Resource.Response; using GB5Shared.Validation; using Microsoft.Extensions.Logging; namespace ComplianceBLL.GSPConfig; public class GSPConfigBLL : IGSPConfigBLL { private readonly IGSPConfigDAL _dal; private readonly IValidation _validation; private readonly AutoNumber _autoNumber; private readonly KeyInvalidate _keyInvalidate; private readonly ILogger _logger; public GSPConfigBLL( IGSPConfigDAL dal, IValidation validation, AutoNumber autoNumber, KeyInvalidate keyInvalidate, ILogger logger) { _dal = dal; _validation = validation; _autoNumber = autoNumber; _keyInvalidate = keyInvalidate; _logger = logger; } public async Task GetGSPConfig(int gspConfigId, LoginDTO login, CancellationToken ct) => await _dal.GetGSPConfig(gspConfigId, login, ct).ConfigureAwait(false); public async Task GetGSPConfigList(LoginDTO login, CancellationToken ct) => await _dal.GetGSPConfigList(login, ct).ConfigureAwait(false); public async Task GetSelectListGSPConfig(LoginDTO login, CancellationToken ct) => await _dal.GetSelectListGSPConfig(login, ct).ConfigureAwait(false); public async Task SaveGSPConfig(GSPConfigDTO dto, LoginDTO login, CancellationToken ct) { try { await _validation.NotEmpty(dto.GSPName, nameof(dto.GSPName)).ConfigureAwait(false); if (dto.GSPConfigId == 0) { var autoNum = await _autoNumber.GetNumberAsync(1, "GSPCONFIG", login).ConfigureAwait(false); dto.GSPConfigId = autoNum.StartNumber; dto.CreatedById = login.UserId; await _dal.SaveGSPConfig(dto, login, ct).ConfigureAwait(false); await _keyInvalidate.AllInvalidateCache($"GSPCONFIG:LIST:{login.ClientId}").ConfigureAwait(false); return $"{SuccessResponse.SaveSuccessMessage} {dto.GSPConfigId}"; } else { dto.ModifiedById = login.UserId; await _dal.UpdateGSPConfig(dto, login, ct).ConfigureAwait(false); await _keyInvalidate.AllInvalidateCache($"GSPCONFIG:LIST:{login.ClientId}").ConfigureAwait(false); return $"{SuccessResponse.UpdateSuccessMessage} {dto.GSPConfigId}"; } } catch (Exception ex) { _logger.LogError(ex, "SaveGSPConfig failed for {GSPName}", dto.GSPName); throw; } } }