using FrameworkDAL.DTO.EIPConversation; using FrameworkDAL.Query.EIPConversation.EIPTenant; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using Newtonsoft.Json; using System; using System.Threading.Tasks; namespace FrameworkDAL.CustomCode.EIPConversation.Tenant { public class EIPTenantDAL : IEIPTenantDAL { private readonly IQueryExecutor _queryExecutor; public EIPTenantDAL(IQueryExecutor queryExecutor) { _queryExecutor = queryExecutor; } /// /// Fetch tenant by TenantId. Returns JSON serialized EIPTenantDTO. /// /// Tenant Id (string) /// Login context /// JSON string of tenant public async Task GetTenantAsync(string tenantId, LoginDTO loginDTO) { if (string.IsNullOrWhiteSpace(tenantId)) throw new ArgumentException("TenantId cannot be null or empty.", nameof(tenantId)); try { string sql = EIPTenantQB.GET_TENANT; // Ensure parameter name matches query placeholder exactly var parameters = new { tenantid = tenantId }; // QuerySingleAsync maps columns to EIPTenantDTO properties var tenantDTO = await _queryExecutor.QuerySingleAsync( loginDTO, sql, parameters ); return JsonConvert.SerializeObject(tenantDTO); } catch (Exception ex) { throw new Exception($"Error fetching tenant '{tenantId}'", ex); } } /// /// Saves tenant record (insert/update). /// /// Tenant DTO /// Login context /// Number of affected rows public async Task SaveTenantAsync(EIPTenantDTO tenantDTO, LoginDTO loginDTO) { if (tenantDTO == null) throw new ArgumentNullException(nameof(tenantDTO)); try { string sql = EIPTenantQB.SAVE_TENANT; // ExecuteAsync will map all DTO properties to query parameters return await _queryExecutor.ExecuteAsync(loginDTO, sql, tenantDTO); } catch (Exception ex) { throw new Exception($"Error saving tenant '{tenantDTO?.TenantId}'", ex); } } } }