using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using SwDAL.DTO.Project; using SwDAL.Query.Project; namespace SwDAL.CustomCode.Project; public class ProjectDAL : IProjectDAL { private readonly IQueryExecutor _qe; public ProjectDAL(IQueryExecutor qe) => _qe = qe; public async Task GetById(int projectId, LoginDTO login, CancellationToken ct) => await _qe.QuerySingleAsync(login, ProjectQB.GET_BY_ID, new { ProjectId = projectId, TenantId = login.ClientId }, cancellationToken: ct) .ConfigureAwait(false); public async Task<(IEnumerable rows, int total)> GetList( string? searchText, int pageOffset, int pageSize, LoginDTO login, CancellationToken ct) { var (sql, countSql) = ProjectQB.BuildProjectList(searchText, "projectname", "ASC", activeOnly: true); var param = new { TenantId = login.ClientId, SearchText = string.IsNullOrWhiteSpace(searchText) ? null : $"%{searchText}%", PageOffset = pageOffset, PageSize = pageSize }; var paged = await _qe.QueryPagedAsync(login, sql, param); return (paged.Items ?? Enumerable.Empty(), paged.TotalCount); } public async Task> GetSelectList(int firstNumber, int maxResult, LoginDTO login, CancellationToken ct) => await _qe.QueryAsync(login, ProjectQB.GET_SELECT_LIST, new { TenantId = login.ClientId, FirstNumber = firstNumber, MaxResult = maxResult }, cancellationToken: ct) .ConfigureAwait(false); public async Task Insert(ProjectDTO dto, LoginDTO login, CancellationToken ct) => await _qe.ExecuteIdentityAsync(login, ProjectQB.INSERT, new { dto.ProjectName, dto.Description, dto.ClientCode, dto.Environment, TenantId = login.ClientId, CreatedById = login.UserId, ModifiedById = login.UserId }).ConfigureAwait(false); public async Task Update(ProjectDTO dto, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync(login, ProjectQB.UPDATE, new { dto.ProjectId, dto.ProjectName, dto.Description, dto.ClientCode, dto.Environment, TenantId = login.ClientId, ModifiedById = login.UserId }, cancellationToken: ct).ConfigureAwait(false); public async Task Delete(int projectId, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync(login, ProjectQB.DELETE, new { ProjectId = projectId, ModifiedById = login.UserId }, cancellationToken: ct).ConfigureAwait(false); public async Task> GetServers(int projectId, LoginDTO login, CancellationToken ct) => await _qe.QueryAsync(login, ProjectQB.GET_SERVERS, new { ProjectId = projectId, TenantId = login.ClientId }, cancellationToken: ct) .ConfigureAwait(false); public async Task AddServer(int projectId, int dbServerId, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync(login, ProjectQB.ADD_SERVER, new { ProjectId = projectId, DbServerId = dbServerId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); public async Task RemoveServer(int projectId, int dbServerId, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync(login, ProjectQB.REMOVE_SERVER, new { ProjectId = projectId, DbServerId = dbServerId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); public async Task> GetManagers(int projectId, LoginDTO login, CancellationToken ct) => await _qe.QueryAsync(login, ProjectQB.GET_MANAGERS, new { ProjectId = projectId, TenantId = login.ClientId }, cancellationToken: ct) .ConfigureAwait(false); public async Task AddManager(int projectId, int userId, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync(login, ProjectQB.ADD_MANAGER, new { ProjectId = projectId, UserId = userId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); public async Task RemoveManager(int projectId, int userId, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync(login, ProjectQB.REMOVE_MANAGER, new { ProjectId = projectId, UserId = userId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); }