using System.Text.Json; using AnalyticsDAL.DTO.AnalysisWorkspace; using AnalyticsDAL.Query.AnalysisWorkspace; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; namespace AnalyticsDAL.CustomCode.AnalysisWorkspace { public class AnalysisWorkspaceDAL : IAnalysisWorkspaceDAL { private readonly IQueryExecutor _queryExecutor; public AnalysisWorkspaceDAL(IQueryExecutor queryExecutor) { _queryExecutor = queryExecutor; } public async Task GetAnalysisWorkspace(int analysisWorkspaceId, LoginDTO login, CancellationToken ct) { var dto = await _queryExecutor.QuerySingleAsync( login, AnalysisWorkspaceQB.GET_ANALYSIS_WORKSPACE, new { AnalysisWorkspaceId = analysisWorkspaceId }, cancellationToken: ct).ConfigureAwait(false); return JsonSerializer.Serialize(dto); } public async Task GetWorkspacesByAnalysis(int analysisId, LoginDTO login, CancellationToken ct) { var list = await _queryExecutor.QueryAsync( login, AnalysisWorkspaceQB.GET_WORKSPACES_BY_ANALYSIS, new { AnalysisId = analysisId }, cancellationToken: ct).ConfigureAwait(false); return JsonSerializer.Serialize(list); } public async Task SaveAnalysisWorkspace(AnalysisWorkspaceDTO dto, LoginDTO login, CancellationToken ct) { await _queryExecutor.ExecuteAsync( login, AnalysisWorkspaceQB.SAVE_ANALYSIS_WORKSPACE, new { dto.AnalysisWorkspaceId, dto.AnalysisId, dto.WorkspaceId, dto.IsCrossWorkspace, dto.DataSourceType, dto.OverrideDataSourceId }, cancellationToken: ct).ConfigureAwait(false); return dto.AnalysisWorkspaceId; } public async Task UpdateAnalysisWorkspace(AnalysisWorkspaceDTO dto, LoginDTO login, CancellationToken ct) { await _queryExecutor.ExecuteAsync( login, AnalysisWorkspaceQB.UPDATE_ANALYSIS_WORKSPACE, new { dto.AnalysisWorkspaceId, dto.IsCrossWorkspace, dto.DataSourceType, dto.OverrideDataSourceId }, cancellationToken: ct).ConfigureAwait(false); } public async Task DeleteAnalysisWorkspace(int analysisWorkspaceId, LoginDTO login, CancellationToken ct) { await _queryExecutor.ExecuteAsync( login, AnalysisWorkspaceQB.DELETE_ANALYSIS_WORKSPACE, new { AnalysisWorkspaceId = analysisWorkspaceId }, cancellationToken: ct).ConfigureAwait(false); } public async Task IsDuplicate(int analysisId, int workspaceId, int excludeId, LoginDTO login, CancellationToken ct) { var count = await _queryExecutor.ExecuteScalarAsync( login, AnalysisWorkspaceQB.CHECK_DUPLICATE, new { AnalysisId = analysisId, WorkspaceId = workspaceId, AnalysisWorkspaceId = excludeId }, cancellationToken: ct).ConfigureAwait(false); return count > 0; } } }