using ECPDAL.Collaboration.DTOs; using ECPDAL.Collaboration.Interfaces; using ECPDAL.Collaboration.QueryBuilders; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; namespace ECPDAL.Collaboration.Implementations; public class CollaborationSpaceDAL(IQueryExecutor _qe) : ICollaborationSpaceDAL { public async Task GetCollaborationSpaceAsync( int collaborationSpaceId, LoginDTO login, CancellationToken ct) { var rows = await _qe.QueryAsync( login, CollaborationSpaceQB.GET_COLLABORATION_SPACE, new { CollaborationSpaceId = collaborationSpaceId, login.DatabaseName }, cancellationToken: ct).ConfigureAwait(false); return rows.FirstOrDefault(); } public async Task> GetSelectListCollaborationSpaceAsync( int userId, LoginDTO login, CancellationToken ct) { var rows = await _qe.QueryAsync( login, CollaborationSpaceQB.GET_SELECTLIST_COLLABORATION_SPACE, new { UserId = userId, login.DatabaseName }, cancellationToken: ct).ConfigureAwait(false); return rows.ToList(); } public async Task> GetCollaborationSpaceListByOwnerAsync( int ownerUserId, LoginDTO login, CancellationToken ct) { var rows = await _qe.QueryAsync( login, CollaborationSpaceQB.GET_COLLABORATION_SPACE_LIST_BY_OWNER, new { OwnerUserId = ownerUserId, login.DatabaseName }, cancellationToken: ct).ConfigureAwait(false); return rows.ToList(); } public async Task> GetCollaborationSpaceListByMemberAsync( int userId, LoginDTO login, CancellationToken ct) { var rows = await _qe.QueryAsync( login, CollaborationSpaceQB.GET_COLLABORATION_SPACE_LIST_BY_MEMBER, new { UserId = userId, login.DatabaseName }, cancellationToken: ct).ConfigureAwait(false); return rows.ToList(); } public async Task SaveCollaborationSpaceAsync( CollaborationSpaceDTO dto, LoginDTO login, CancellationToken ct) { await _qe.ExecuteAsync( login, CollaborationSpaceQB.SAVE_COLLABORATION_SPACE, dto, cancellationToken: ct).ConfigureAwait(false); return dto.CollaborationSpaceId; } public async Task UpdateCollaborationSpaceAsync( CollaborationSpaceDTO dto, LoginDTO login, CancellationToken ct) { await _qe.ExecuteAsync( login, CollaborationSpaceQB.UPDATE_COLLABORATION_SPACE, dto, cancellationToken: ct).ConfigureAwait(false); } public async Task ArchiveCollaborationSpaceAsync( int collaborationSpaceId, int modifiedById, LoginDTO login, CancellationToken ct) { await _qe.ExecuteAsync( login, CollaborationSpaceQB.ARCHIVE_COLLABORATION_SPACE, new { CollaborationSpaceId = collaborationSpaceId, ModifiedById = modifiedById, ModifiedOn = DateTime.UtcNow, login.DatabaseName, }, cancellationToken: ct).ConfigureAwait(false); } public async Task> GetMembersForSpaceAsync( int collaborationSpaceId, LoginDTO login, CancellationToken ct) { var rows = await _qe.QueryAsync( login, CollaborationSpaceQB.GET_MEMBERS_FOR_SPACE, new { CollaborationSpaceId = collaborationSpaceId, login.DatabaseName }, cancellationToken: ct).ConfigureAwait(false); return rows.ToList(); } public async Task GetMemberAsync( int collaborationSpaceId, int userId, LoginDTO login, CancellationToken ct) { var rows = await _qe.QueryAsync( login, CollaborationSpaceQB.GET_MEMBER, new { CollaborationSpaceId = collaborationSpaceId, UserId = userId, login.DatabaseName }, cancellationToken: ct).ConfigureAwait(false); return rows.FirstOrDefault(); } public async Task> GetSelectListMembersAsync( int collaborationSpaceId, LoginDTO login, CancellationToken ct) { var rows = await _qe.QueryAsync( login, CollaborationSpaceQB.GET_SELECTLIST_MEMBER, new { CollaborationSpaceId = collaborationSpaceId, login.DatabaseName }, cancellationToken: ct).ConfigureAwait(false); return rows.ToList(); } public async Task AddMemberAsync( CollaborationSpaceMemberDTO dto, LoginDTO login, CancellationToken ct) { await _qe.ExecuteAsync( login, CollaborationSpaceQB.ADD_MEMBER, dto, cancellationToken: ct).ConfigureAwait(false); } public async Task RemoveMemberAsync( int collaborationSpaceId, int userId, LoginDTO login, CancellationToken ct) { await _qe.ExecuteAsync( login, CollaborationSpaceQB.REMOVE_MEMBER, new { CollaborationSpaceId = collaborationSpaceId, UserId = userId, login.DatabaseName }, cancellationToken: ct).ConfigureAwait(false); } }