using CMSDAL.DTO.Site; using CMSDAL.Query.Site; 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 SiteDomainDAL : ISiteDomainDAL { private readonly IQueryExecutor _qe; private readonly IValidation _validation; public SiteDomainDAL(IQueryExecutor qe, IValidation validation) { _qe = qe; _validation = validation; } public async Task GetBySiteAsync(int siteId, LoginDTO loginDTO, CancellationToken ct = default) { try { var result = await _qe.QueryAsync(loginDTO, SiteDomainQB.GET_BY_SITE, new { SiteId = siteId, TenantId = loginDTO.ClientId }, cancellationToken: ct); return JsonConvert.SerializeObject(result); } catch { throw; } } public async Task SaveAsync(SiteDomainDTO dto, LoginDTO loginDTO, DbTransaction? tx = null, CancellationToken ct = default) { try { int newSiteDomainId = await _qe.ExecuteIdentityAsync(loginDTO, SiteDomainQB.SAVE_SITEDOMAIN, dto, tx); dto.SiteDomainId = newSiteDomainId; return newSiteDomainId; } catch (Exception ex) { string error = await _validation.HandleException(ex, $"{ErrorResponse.SaveErrorMessage}"); throw new Exception(error); } } public async Task DeleteAsync(int siteDomainId, LoginDTO loginDTO, CancellationToken ct = default) { try { int rows = await _qe.ExecuteAsync(loginDTO, SiteDomainQB.DELETE_SITEDOMAIN, new { SiteDomainId = siteDomainId, 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 ResolveSiteByDomainAsync(string domainName, LoginDTO loginDTO, CancellationToken ct = default) { try { var result = await _qe.QueryAsync(loginDTO, SiteDomainQB.RESOLVE_SITE_BY_DOMAIN, new { DomainName = domainName }, cancellationToken: ct); return result.FirstOrDefault(); } catch { throw; } } }