using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; using AccountsDAL.CustomCode.Insurance; using AccountsDAL.DTO.Insurance; using GB5Shared.DaprCache; using GB5Shared.DTO.Framework.AutoNumber; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.HybridCache; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.Resource.Response; using GB5Shared.Validation; using static GB5Shared.GB5Constant.Constant; namespace AccountsBLL.Insurance { public class InsuranceBLL : IInsuranceBLL { private readonly IInsuranceDAL _InsuranceDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; private readonly KeyInvalidate _KeyInvalidate; public InsuranceBLL(IInsuranceDAL InsuranceDAL, AutoNumber AutoNumber, IValidation validation, KeyInvalidate keyInvalidate) { _InsuranceDAL = InsuranceDAL; _AutoNumber = AutoNumber; _Validation = validation; _KeyInvalidate = keyInvalidate; } public async Task GetInsurance(int InsuranceId, LoginDTO LoginDTO) { try { return await _InsuranceDAL.GetInsurance(InsuranceId, LoginDTO); } catch (Exception) { throw; } } public async Task SaveInsurance( InsuranceDTO InsuranceDTO, LoginDTO LoginDTO) { if (InsuranceDTO == null) throw new ArgumentNullException(nameof(InsuranceDTO)); AutoNumberDTO? autoNumberDTO = null; try { InsuranceDTO.InsuranceModifiedById = LoginDTO.UserId; InsuranceDTO.InsuranceModifiedOn = DateTime.UtcNow; int initialId = InsuranceDTO.InsuranceId; int count = 1 + initialId; string result; if (initialId == 0) { autoNumberDTO = await _AutoNumber.GetNumberAsync( count, "INSURANCE", LoginDTO); InsuranceDTO.InsuranceId = autoNumberDTO.StartNumber; InsuranceDTO.InsuranceCreatedById = LoginDTO.UserId; InsuranceDTO.InsuranceCreatedOn = DateTime.UtcNow; await _InsuranceDAL.SaveInsurance( InsuranceDTO, LoginDTO); result = $"{SuccessResponse.SaveSuccessMessage} {InsuranceDTO.InsuranceId}"; } else { await _InsuranceDAL.UpdateInsurance( InsuranceDTO, LoginDTO); result = $"{SuccessResponse.UpdateSuccessMessage} {InsuranceDTO.InsuranceId}"; } var cacheKey = CacheKeyGenerator.KeyGeneration( InsuranceDTO.InsuranceId, EntityConstant.OBJECTINSURANCE, CacheKeyLevel.CLIENT_LEVEL, string.Empty, LoginDTO); //await _KeyInvalidate.AllInvalidateCache(cacheKey).ConfigureAwait(false); return result; } catch (ValidationException vex) { throw new Exception(vex.Message); } catch { if (autoNumberDTO != null) { await _AutoNumber.RollbackAutoNumber( "INSURANCE", autoNumberDTO.StartNumber, LoginDTO); } throw; } } public async Task GetSelectListInsurance(int FirstNumber, int MaxResult, CriteriaDTO criteriaDTO, LoginDTO loginDTO) { try { return await _InsuranceDAL.GetSelectListInsurance(FirstNumber, MaxResult, criteriaDTO, loginDTO); } catch (Exception) { throw; } } public async Task GetInsuranceList(CriteriaDTO criteriaDTO, LoginDTO loginDTO) { try { return await _InsuranceDAL.GetInsuranceList(criteriaDTO, loginDTO); } catch (Exception) { throw; } } public async Task DeleteInsurance( int InsuranceId, LoginDTO LoginDTO) { try { var result = await _InsuranceDAL.DeleteInsurance( InsuranceId, LoginDTO); var cacheKey = CacheKeyGenerator.KeyGeneration( InsuranceId, EntityConstant.OBJECTINSURANCE, CacheKeyLevel.CLIENT_LEVEL, string.Empty, LoginDTO); await _KeyInvalidate.AllInvalidateCache(cacheKey) .ConfigureAwait(false); return result; } catch { throw; } } } }