using System.Linq; using System.Text.Json; using AnalyticsDAL.DTO.Workspace; using AnalyticsDAL.Query.Workspace; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; namespace AnalyticsDAL.CustomCode.Workspace { public class WorkspaceDAL : IWorkspaceDAL { private readonly IQueryExecutor _queryExecutor; public WorkspaceDAL(IQueryExecutor queryExecutor) { _queryExecutor = queryExecutor; } public async Task GetWorkspace(int workspaceId, LoginDTO login, CancellationToken ct) { var dto = await _queryExecutor.QuerySingleAsync( login, WorkspaceQB.GET_WORKSPACE, new { WorkspaceId = workspaceId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); return JsonSerializer.Serialize(dto); } public async Task GetSelectListWorkspace(LoginDTO login, CancellationToken ct) { var list = await _queryExecutor.QueryAsync( login, WorkspaceQB.GET_SELECTLIST_WORKSPACE, new { TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); return JsonSerializer.Serialize(list); } public async Task SaveWorkspace(WorkspaceDTO dto, LoginDTO login, CancellationToken ct) { await _queryExecutor.ExecuteAsync( login, WorkspaceQB.SAVE_WORKSPACE, new { dto.WorkspaceId, dto.WorkspaceCode, dto.WorkspaceName, dto.Description, dto.WorkspaceType, dto.IsDefault, dto.Settings, dto.SortOrder, dto.SourceType, TenantId = login.ClientId, CreatedById = login.UserId, ModifiedById = login.UserId }, cancellationToken: ct).ConfigureAwait(false); return dto.WorkspaceId; } public async Task UpdateWorkspace(WorkspaceDTO dto, LoginDTO login, CancellationToken ct) { await _queryExecutor.ExecuteAsync( login, WorkspaceQB.UPDATE_WORKSPACE, new { dto.WorkspaceId, dto.WorkspaceCode, dto.WorkspaceName, dto.Description, dto.WorkspaceType, dto.IsDefault, dto.Settings, dto.SortOrder, dto.Status, TenantId = login.ClientId, ModifiedById = login.UserId }, cancellationToken: ct).ConfigureAwait(false); } public async Task DeleteWorkspace(int workspaceId, LoginDTO login, CancellationToken ct) { await _queryExecutor.ExecuteAsync( login, WorkspaceQB.DELETE_WORKSPACE, new { WorkspaceId = workspaceId, TenantId = login.ClientId, ModifiedById = login.UserId }, cancellationToken: ct).ConfigureAwait(false); } public async Task IsDuplicateCode(string code, int excludeId, LoginDTO login, CancellationToken ct) { var count = await _queryExecutor.ExecuteScalarAsync( login, WorkspaceQB.CHECK_DUPLICATE_CODE, new { WorkspaceCode = code, TenantId = login.ClientId, WorkspaceId = excludeId }, cancellationToken: ct).ConfigureAwait(false); return count > 0; } public async Task IsDuplicateName(string name, int excludeId, LoginDTO login, CancellationToken ct) { var count = await _queryExecutor.ExecuteScalarAsync( login, WorkspaceQB.CHECK_DUPLICATE_NAME, new { WorkspaceName = name, TenantId = login.ClientId, WorkspaceId = excludeId }, cancellationToken: ct).ConfigureAwait(false); return count > 0; } public async Task GetWorkspaceTenantId(int workspaceId, LoginDTO login, CancellationToken ct) { var rows = await _queryExecutor.QueryAsync( login, WorkspaceQB.GET_WORKSPACE_TENANTID, new { WorkspaceId = workspaceId }, cancellationToken: ct).ConfigureAwait(false); return rows.Select(r => (int?)r).FirstOrDefault(); } } }