using FrameworkDAL.CustomCode.City; using FrameworkDAL.DTO.City; using GB5Shared.DTO.Framework.AutoNumber; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.Resource.Response; using GB5Shared.ResponseStandard; using GB5Shared.Validation; using System.ComponentModel.DataAnnotations; namespace FrameworkBLL.City { public class CityBLL : ICityBLL { private readonly ICityDAL _CityDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; public CityBLL(ICityDAL cityDAL, AutoNumber AutoNumber, IValidation Validation) { _CityDAL = cityDAL; _AutoNumber = AutoNumber; _Validation = Validation; } public async Task GetCity(int cityId, LoginDTO loginDTO) { try { return await _CityDAL.GetCity(cityId, loginDTO); } catch (Exception) { throw; } } public async Task SaveCity(CityDTO CityDTO, LoginDTO LoginDTO) { if (CityDTO == null) throw new ArgumentNullException(nameof(CityDTO)); AutoNumberDTO? autoNumberDTO = null; try { await _Validation.NotEmpty(CityDTO.CityCode, nameof(CityDTO.CityCode)); await _Validation.NotEmpty(CityDTO.CityName, nameof(CityDTO.CityName)); CityDTO.CityModifiedById = LoginDTO.UserId; CityDTO.CityModifiedOn = DateTime.UtcNow; int count = 1; if (CityDTO.CityId == 0) { autoNumberDTO = await _AutoNumber.GetAutoNumber(count, "City", LoginDTO); CityDTO.CityId = autoNumberDTO.StartNumber; CityDTO.CityCreatedById = LoginDTO.UserId; CityDTO.CityCreatedOn = DateTime.UtcNow; await _CityDAL.SaveCity(CityDTO, LoginDTO); return $"{SuccessResponse.SaveSuccessMessage} {CityDTO.CityId}"; } else { await _CityDAL.UpdateCity(CityDTO, LoginDTO); return $"{SuccessResponse.UpdateSuccessMessage} {CityDTO.CityId}"; } } catch (ValidationException vex) { throw new Exception(vex.Message); } catch (Exception) { if (autoNumberDTO != null && CityDTO.CityId > 0) await _AutoNumber.RollbackAutoNumber("City", CityDTO.CityId, LoginDTO); throw; } } public async Task GetSelectListCity(int FirstNumber, int MaxResult, CriteriaDTO criteriaDTO, LoginDTO LoginDTO) { try { return await _CityDAL.GetSelectListCity(FirstNumber, MaxResult, LoginDTO, criteriaDTO); } catch (Exception) { throw; } } public async Task DeleteCity(int CityId, LoginDTO LoginDTO) { try { return await _CityDAL.DeleteCity(CityId, LoginDTO); } catch (Exception) { throw; } } } }