using ECPDAL.Communication.DTOs; using ECPDAL.Communication.Interfaces; using ECPDAL.Communication.QueryBuilders; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; namespace ECPDAL.Communication.Implementations; public class CommentThreadDAL(IQueryExecutor _qe) : ICommentThreadDAL { public async Task GetCommentThreadAsync( int commentThreadId, LoginDTO login, CancellationToken ct) { var rows = await _qe.QueryAsync( login, CommentThreadQB.GET_COMMENT_THREAD, new { CommentThreadId = commentThreadId, login.DatabaseName }, cancellationToken: ct).ConfigureAwait(false); return rows.FirstOrDefault(); } public async Task> GetCommentThreadTreeAsync( int rootCommentThreadId, LoginDTO login, CancellationToken ct) { var rows = await _qe.QueryAsync( login, CommentThreadQB.GET_COMMENT_THREAD_TREE, new { RootCommentThreadId = rootCommentThreadId, login.DatabaseName }, cancellationToken: ct).ConfigureAwait(false); return rows.ToList(); } public async Task> GetCommentThreadListByObjectAsync( int objectTypeId, int objectId, LoginDTO login, CancellationToken ct) { var rows = await _qe.QueryAsync( login, CommentThreadQB.GET_COMMENT_THREAD_LIST_BY_OBJECT, new { ObjectTypeId = objectTypeId, ObjectId = objectId, login.DatabaseName }, cancellationToken: ct).ConfigureAwait(false); return rows.ToList(); } public async Task SaveCommentThreadAsync( CommentThreadDTO dto, LoginDTO login, CancellationToken ct) { await _qe.ExecuteAsync( login, CommentThreadQB.SAVE_COMMENT_THREAD, dto, cancellationToken: ct).ConfigureAwait(false); return dto.CommentThreadId; } public async Task UpdateCommentThreadStatusAsync( int commentThreadId, byte newStatus, int modifiedById, LoginDTO login, CancellationToken ct) { await _qe.ExecuteAsync( login, CommentThreadQB.UPDATE_COMMENT_THREAD_STATUS, new { CommentThreadId = commentThreadId, NewStatus = newStatus, ModifiedById = modifiedById, ModifiedOn = DateTime.UtcNow, login.DatabaseName, }, cancellationToken: ct).ConfigureAwait(false); } public async Task DeleteCommentThreadAsync( int commentThreadId, int modifiedById, LoginDTO login, CancellationToken ct) { await _qe.ExecuteAsync( login, CommentThreadQB.DELETE_COMMENT_THREAD, new { CommentThreadId = commentThreadId, ModifiedById = modifiedById, ModifiedOn = DateTime.UtcNow, login.DatabaseName, }, cancellationToken: ct).ConfigureAwait(false); } public async Task> GetThreadParticipantUserIdsAsync( int rootCommentThreadId, LoginDTO login, CancellationToken ct) { var rows = await _qe.QueryAsync( login, CommentThreadQB.GET_THREAD_PARTICIPANT_USERIDS, new { RootCommentThreadId = rootCommentThreadId, login.DatabaseName }, cancellationToken: ct).ConfigureAwait(false); return rows.ToList(); } public async Task HasSecurityRightsAsync( int userId, int roleId, int objectTypeId, int threadSecurityMarkId, LoginDTO login, CancellationToken ct) { var count = await _qe.ExecuteScalarAsync( login, CommentThreadQB.GET_SECURITY_RIGHTS_CHECK, new { UserId = userId, RoleId = roleId, ObjectTypeId = objectTypeId, ThreadSecurityMarkId = threadSecurityMarkId, }, cancellationToken: ct).ConfigureAwait(false); return count > 0; } public async Task IsUserInGroupAsync( int userId, int userGroupId, LoginDTO login, CancellationToken ct) { var count = await _qe.ExecuteScalarAsync( login, CommentThreadQB.GET_USER_IN_GROUP_CHECK, new { UserId = userId, UserGroupId = userGroupId }, cancellationToken: ct).ConfigureAwait(false); return count > 0; } public async Task> GetOrganizationGroupDetailsAsync( LoginDTO login, CancellationToken ct) { var rows = await _qe.QueryAsync( login, CommentThreadQB.GET_ORGANIZATION_GROUP_DETAILS, null, cancellationToken: ct).ConfigureAwait(false); return rows.ToList(); } }