using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using PayRollDAL.DTO.Address; using PayRollDAL.Query.Address; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace PayRollDAL.CustomeCode.Address { public class AddressDAL : IAddressDAL { private readonly IQueryExecutor _QueryExecutor; public AddressDAL(IQueryExecutor queryExecutor) { _QueryExecutor = queryExecutor; } #region Save / Update Operations public async Task SaveAddress(AddressDTO addressDTO, LoginDTO loginDTO) { try { string sql = AddressQB.SAVE_ADDRESS; return await _QueryExecutor.ExecuteAsync(loginDTO, sql, addressDTO); } catch (Exception ex) { throw new Exception("Error while saving Address", ex); } } public async Task UpdateAddress(AddressDTO addressDTO, LoginDTO loginDTO) { try { string sql = AddressQB.UPDATE_ADDRESS; return await _QueryExecutor.ExecuteAsync(loginDTO, sql, addressDTO); } catch (Exception ex) { throw new Exception("Error while updating Address", ex); } } #endregion #region Read Operations public async Task> GetAddressDetailAsync(int objectTypeId, int objectId, LoginDTO loginDTO) { try { string sql = AddressQB.GET_ADDRESS_DETAIL; var parameters = new { ObjectTypeId = objectTypeId, ObjectId = objectId }; var result = await _QueryExecutor.QueryAsync(loginDTO, sql, parameters); return result?.ToList() ?? new List(); } catch (Exception ex) { throw new Exception($"Error while retrieving Address details for ObjectTypeId={objectTypeId}, ObjectId={objectId}", ex); } } public async Task GetAddressAsync(int objectTypeId, int objectId, LoginDTO loginDTO) { try { var addresses = await GetAddressDetailAsync(objectTypeId, objectId, loginDTO); return addresses?.FirstOrDefault(); } catch (Exception ex) { throw new Exception($"Error while retrieving Address for ObjectTypeId={objectTypeId}, ObjectId={objectId}", ex); } } public async Task GetAddressNewAsync(int addressId, LoginDTO loginDTO) { try { string sql = AddressQB.GET_ADDRESS_DETAIL; var parameters = new { AddressId = addressId }; var result = await _QueryExecutor.QueryAsync(loginDTO, sql, parameters); return result?.FirstOrDefault(); } catch (Exception ex) { throw new Exception($"Error while retrieving Address by ID: {addressId}", ex); } } #endregion } }