using CMSDAL.DTO.Site; using CMSDAL.Query.Site; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using GB5Shared.Resource.Response; using GB5Shared.Validation; using Newtonsoft.Json; using System.Data.Common; using System.Linq; namespace CMSDAL.CustomCode.Site; public class SiteDAL : ISiteDAL { private readonly IQueryExecutor _qe; private readonly IValidation _validation; public SiteDAL(IQueryExecutor qe, IValidation validation) { _qe = qe; _validation = validation; } public async Task GetSite(int siteId, LoginDTO loginDTO, CancellationToken ct = default) { try { var dto = await _qe.QuerySingleAsync(loginDTO, SiteQB.GET_SITE, new { SiteId = siteId, TenantId = loginDTO.ClientId }, cancellationToken: ct); return JsonConvert.SerializeObject(dto); } catch { throw; } } public async Task GetSelectListSite(int firstNumber, int maxResult, CriteriaDTO criteriaDTO, LoginDTO loginDTO, CancellationToken ct = default) { try { var result = await _qe.QueryAsync(loginDTO, SiteQB.GET_SELECTLIST_SITE, new { firstnumber = firstNumber, maxresult = maxResult, TenantId = loginDTO.ClientId }, cancellationToken: ct); return JsonConvert.SerializeObject(result); } catch { throw; } } public async Task SaveSite(SiteDTO dto, LoginDTO loginDTO, DbTransaction? tx = null, CancellationToken ct = default) { try { int newSiteId = await _qe.ExecuteIdentityAsync(loginDTO, SiteQB.SAVE_SITE, dto, tx); dto.SiteId = newSiteId; return newSiteId; } catch (Exception ex) { string error = await _validation.HandleException(ex, $"{ErrorResponse.SaveErrorMessage}"); throw new Exception(error); } } public async Task UpdateSite(SiteDTO dto, LoginDTO loginDTO, DbTransaction? tx = null, CancellationToken ct = default) { try { await _qe.ExecuteAsync(loginDTO, SiteQB.UPDATE_SITE, dto, tx, ct); return dto.SiteId; } catch (Exception ex) { string error = await _validation.HandleException(ex, $"{ErrorResponse.UpdateErrorMessage}"); throw new Exception(error); } } public async Task DeleteSite(int siteId, LoginDTO loginDTO, CancellationToken ct = default) { try { int rows = await _qe.ExecuteAsync(loginDTO, SiteQB.DELETE_SITE, new { SiteId = siteId, TenantId = loginDTO.ClientId, ModifiedById = loginDTO.UserId }, cancellationToken: ct); return rows > 0 ? SuccessResponse.DeleteSuccessMessage : ErrorResponse.DeleteNotFoundMessage; } catch (Exception ex) { string error = await _validation.HandleException(ex, $"{ErrorResponse.DeleteErrorMessage}"); throw new Exception(error); } } public async Task GetSiteTenantIdAsync(int siteId, LoginDTO loginDTO, CancellationToken ct = default) { try { var result = await _qe.QueryAsync(loginDTO, SiteQB.GET_SITE_TENANT, new { SiteId = siteId }, cancellationToken: ct); return result.FirstOrDefault(); } catch { throw; } } }