using System; using System.Collections.Generic; using System.Data.Common; using System.Threading; using System.Threading.Tasks; using FrameworkDAL.Query.GOP; using GB5Shared.DTO.Framework.Login; using GB5Shared.DTO.GOP; using GB5Shared.QueryExecutor; namespace FrameworkDAL.CustomCode.GOP { public class CanonicalModelDAL : ICanonicalModelDAL { private readonly IQueryExecutor _QueryExecutor; public CanonicalModelDAL(IQueryExecutor QueryExecutor) { _QueryExecutor = QueryExecutor; } // ── Canonical Model ──────────────────────────────────────── public async Task> GetList( LoginDTO loginDTO, CancellationToken ct = default) { return await _QueryExecutor.QueryAsync( loginDTO, CanonicalModelQB.GET_LIST, new { TenantId = loginDTO.ClientId }, cancellationToken: ct); } public async Task GetById( int canonicalModelId, LoginDTO loginDTO, CancellationToken ct = default) { return await _QueryExecutor.QuerySingleAsync( loginDTO, CanonicalModelQB.GET_BY_ID, new { TenantId = loginDTO.ClientId, CanonicalModelId = canonicalModelId }, cancellationToken: ct); } public async Task GetByEntityCode( string entityCode, LoginDTO loginDTO, CancellationToken ct = default) { return await _QueryExecutor.QuerySingleAsync( loginDTO, CanonicalModelQB.GET_BY_ENTITY_CODE, new { TenantId = loginDTO.ClientId, EntityCode = entityCode }, cancellationToken: ct); } public async Task Insert( GopCanonicalModelDTO dto, LoginDTO loginDTO, DbTransaction tx, CancellationToken ct = default) { var now = DateTime.UtcNow; await _QueryExecutor.ExecuteAsync(loginDTO, CanonicalModelQB.INSERT, new { dto.CanonicalModelId, TenantId = loginDTO.ClientId, dto.EntityCode, dto.ModelName, dto.Description, dto.Version, dto.IsActive, dto.SortOrder, dto.SourceType, CreatedById = loginDTO.UserId, CreatedOn = now, ModifiedById = loginDTO.UserId, ModifiedOn = now }, tx, ct); } public async Task Update( GopCanonicalModelDTO dto, LoginDTO loginDTO, DbTransaction tx, CancellationToken ct = default) { await _QueryExecutor.ExecuteAsync(loginDTO, CanonicalModelQB.UPDATE, new { dto.CanonicalModelId, TenantId = loginDTO.ClientId, dto.ModelName, dto.Description, dto.Version, dto.IsActive, dto.SortOrder, ModifiedById = loginDTO.UserId, ModifiedOn = DateTime.UtcNow }, tx, ct); } public async Task Deactivate( int canonicalModelId, LoginDTO loginDTO, DbTransaction tx, CancellationToken ct = default) { await _QueryExecutor.ExecuteAsync(loginDTO, CanonicalModelQB.DEACTIVATE, new { TenantId = loginDTO.ClientId, CanonicalModelId = canonicalModelId, ModifiedById = loginDTO.UserId, ModifiedOn = DateTime.UtcNow }, tx, ct); } // ── Canonical Field ──────────────────────────────────────── public async Task> GetFieldsByModel( int canonicalModelId, LoginDTO loginDTO, CancellationToken ct = default) { return await _QueryExecutor.QueryAsync( loginDTO, CanonicalModelQB.GET_FIELDS_BY_MODEL, new { TenantId = loginDTO.ClientId, CanonicalModelId = canonicalModelId }, cancellationToken: ct); } public async Task InsertField( GopCanonicalFieldDTO dto, LoginDTO loginDTO, DbTransaction tx, CancellationToken ct = default) { var now = DateTime.UtcNow; await _QueryExecutor.ExecuteAsync(loginDTO, CanonicalModelQB.INSERT_FIELD, new { dto.CanonicalFieldId, TenantId = loginDTO.ClientId, dto.CanonicalModelId, dto.FieldPath, dto.FieldName, dto.DataType, dto.IsRequired, dto.DefaultValue, dto.Description, dto.SortOrder, CreatedById = loginDTO.UserId, CreatedOn = now, ModifiedById = loginDTO.UserId, ModifiedOn = now }, tx, ct); } public async Task GetFieldModelId( int canonicalFieldId, LoginDTO loginDTO, CancellationToken ct = default) { return await _QueryExecutor.ExecuteScalarAsync( loginDTO, CanonicalModelQB.GET_FIELD_MODEL_ID, new { TenantId = loginDTO.ClientId, CanonicalFieldId = canonicalFieldId }, cancellationToken: ct); } public async Task DeleteField( int canonicalFieldId, LoginDTO loginDTO, DbTransaction tx, CancellationToken ct = default) { await _QueryExecutor.ExecuteAsync(loginDTO, CanonicalModelQB.DELETE_FIELD, new { TenantId = loginDTO.ClientId, CanonicalFieldId = canonicalFieldId, ModifiedById = loginDTO.UserId, ModifiedOn = DateTime.UtcNow }, tx, ct); } public async Task DeleteFieldsByModel( int canonicalModelId, LoginDTO loginDTO, DbTransaction tx, CancellationToken ct = default) { await _QueryExecutor.ExecuteAsync(loginDTO, CanonicalModelQB.DELETE_FIELDS_BY_MODEL, new { TenantId = loginDTO.ClientId, CanonicalModelId = canonicalModelId, ModifiedById = loginDTO.UserId, ModifiedOn = DateTime.UtcNow }, tx, ct); } } }