using ComplianceDAL.CustomCode.GSTRegistration; using ComplianceDAL.DTO.GSTRegistration; using GB5Shared.DaprCache; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.Resource.Response; using GB5Shared.Validation; using Microsoft.Extensions.Logging; namespace ComplianceBLL.GSTRegistration; public class GSTRegistrationBLL : IGSTRegistrationBLL { private readonly IGSTRegistrationDAL _dal; private readonly IValidation _validation; private readonly AutoNumber _autoNumber; private readonly KeyInvalidate _keyInvalidate; private readonly ILogger _logger; public GSTRegistrationBLL( IGSTRegistrationDAL dal, IValidation validation, AutoNumber autoNumber, KeyInvalidate keyInvalidate, ILogger logger) { _dal = dal; _validation = validation; _autoNumber = autoNumber; _keyInvalidate = keyInvalidate; _logger = logger; } public async Task GetGSTRegistration(int gstRegistrationId, LoginDTO login, CancellationToken ct) { return await _dal.GetGSTRegistration(gstRegistrationId, login, ct).ConfigureAwait(false); } public async Task GetGSTRegistrationList(LoginDTO login, CancellationToken ct) { return await _dal.GetGSTRegistrationList(login, ct).ConfigureAwait(false); } public async Task GetSelectListGSTRegistration(LoginDTO login, CancellationToken ct) { return await _dal.GetSelectListGSTRegistration(login, ct).ConfigureAwait(false); } public async Task SaveGSTRegistration(GSTRegistrationDTO dto, LoginDTO login, CancellationToken ct) { try { await _validation.NotEmpty(dto.GSTIN, nameof(dto.GSTIN)).ConfigureAwait(false); await _validation.NotEmpty(dto.LegalName, nameof(dto.LegalName)).ConfigureAwait(false); await _validation.NotEmpty(dto.StateCode, nameof(dto.StateCode)).ConfigureAwait(false); if (dto.GSTRegistrationId == 0) { var autoNum = await _autoNumber.GetNumberAsync(1, "GSTREGISTRATION", login).ConfigureAwait(false); dto.GSTRegistrationId = autoNum.StartNumber; dto.CreatedById = login.UserId; await _dal.SaveGSTRegistration(dto, login, ct).ConfigureAwait(false); await _keyInvalidate.AllInvalidateCache($"GSTREGISTRATION:LIST:{login.ClientId}").ConfigureAwait(false); return $"{SuccessResponse.SaveSuccessMessage} {dto.GSTRegistrationId}"; } else { dto.ModifiedById = login.UserId; await _dal.UpdateGSTRegistration(dto, login, ct).ConfigureAwait(false); await _keyInvalidate.AllInvalidateCache($"GSTREGISTRATION:LIST:{login.ClientId}").ConfigureAwait(false); return $"{SuccessResponse.UpdateSuccessMessage} {dto.GSTRegistrationId}"; } } catch (Exception ex) { _logger.LogError(ex, "SaveGSTRegistration failed for GSTIN {GSTIN}", dto.GSTIN); throw; } } public async Task DeleteGSTRegistration(int gstRegistrationId, LoginDTO login, CancellationToken ct) { try { await _dal.DeleteGSTRegistration(gstRegistrationId, login.UserId, login, ct).ConfigureAwait(false); await _keyInvalidate.AllInvalidateCache($"GSTREGISTRATION:LIST:{login.ClientId}").ConfigureAwait(false); return SuccessResponse.DeleteSuccessMessage; } catch (Exception ex) { _logger.LogError(ex, "DeleteGSTRegistration failed for Id {Id}", gstRegistrationId); throw; } } }