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);
}
}
}
}