using System.Text.Json; using AnalyticsDAL.DTO.Analysis; using AnalyticsDAL.Query.AnalysisObject; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using System.Data.Common; namespace AnalyticsDAL.CustomCode.AnalysisObject { public class AnalysisObjectDAL : IAnalysisObjectDAL { private readonly IQueryExecutor _queryExecutor; public AnalysisObjectDAL(IQueryExecutor queryExecutor) { _queryExecutor = queryExecutor; } public async Task GetAnalysisObject(int analysisObjectId, LoginDTO login, CancellationToken ct) { var dto = await _queryExecutor.QuerySingleAsync( login, AnalysisObjectQB.GET_ANALYSISOBJECT, new { AnalysisObjectId = analysisObjectId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); return JsonSerializer.Serialize(dto); } public async Task GetAnalysisObjectsByAnalysis(int analysisId, LoginDTO login, CancellationToken ct) { var list = await _queryExecutor.QueryAsync( login, AnalysisObjectQB.GET_ANALYSISOBJECTS_BY_ANALYSIS, new { AnalysisId = analysisId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); return JsonSerializer.Serialize(list); } public async Task SaveAnalysisObject(AnalysisObjectDTO dto, LoginDTO login, CancellationToken ct, DbTransaction tx = null) { await _queryExecutor.ExecuteAsync( login, AnalysisObjectQB.SAVE_ANALYSISOBJECT, new { dto.AnalysisObjectId, dto.AnalysisId, dto.AnalysisObjectSlNo, dto.DBObjectId, dto.AnalysisObjectFilterExpression, dto.AnalysisObjectVariables, TenantId = login.ClientId, WorkspaceId = dto.WorkspaceId }, tx, cancellationToken: ct).ConfigureAwait(false); return dto.AnalysisObjectId; } public async Task UpdateAnalysisObject(AnalysisObjectDTO dto, LoginDTO login, CancellationToken ct) { await _queryExecutor.ExecuteAsync( login, AnalysisObjectQB.UPDATE_ANALYSISOBJECT, new { dto.AnalysisObjectId, dto.AnalysisObjectSlNo, dto.DBObjectId, dto.AnalysisObjectFilterExpression, dto.AnalysisObjectVariables, dto.WorkspaceId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); } public async Task DeleteAnalysisObject(int analysisObjectId, LoginDTO login, CancellationToken ct) { await _queryExecutor.ExecuteAsync( login, AnalysisObjectQB.DELETE_ANALYSISOBJECT, new { AnalysisObjectId = analysisObjectId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); } public async Task IsDuplicate(int analysisId, int dbObjectId, int excludeId, LoginDTO login, CancellationToken ct) { var count = await _queryExecutor.ExecuteScalarAsync( login, AnalysisObjectQB.CHECK_DUPLICATE, new { AnalysisId = analysisId, DbObjectId = dbObjectId, AnalysisObjectId = excludeId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); return count > 0; } } }