public async Task DeleteLikedEntityAsync(EntityLikeDto entityLike, CancellationToken cancellationToken) { try { const string query = @" DELETE FROM [dbo].[Entity_Like] WHERE [Entity_Id] = @Entity_Id AND [MembershipUser_Id] = @MembershipUser_Id"; var queryDefinition = new CommandDefinition(query, new { Entity_Id = entityLike.EntityId, MembershipUser_Id = entityLike.MembershipUserId, }, cancellationToken: cancellationToken); using var dbConnection = await _connectionFactory.GetReadWriteConnectionAsync(cancellationToken); var result = await dbConnection.ExecuteAsync(queryDefinition); if (result != 1) { _logger.LogError("Error: User request to delete was not successful.", queryDefinition); throw new DBConcurrencyException("Error: User request to delete was not successful."); } } catch (SqlException ex) { _logger.LogError(ex, "Error: User request to create was not successful."); throw new DBConcurrencyException("Error: User request was not successful."); } }
public async Task UnlikeEntityAsync(Guid membershipUserId, string slug, Guid entityId, CancellationToken cancellationToken) { if (Guid.Empty == membershipUserId) { throw new ArgumentOutOfRangeException(nameof(membershipUserId)); } if (Guid.Empty == entityId) { throw new ArgumentOutOfRangeException(nameof(entityId)); } var userCanPerformAction = await _permissionsService.UserCanPerformActionAsync(membershipUserId, slug, LikeRole, cancellationToken); if (userCanPerformAction is not true) { _logger.LogError($"Error: UnlikeEntityAsync - User:{0} does not have access to edit/delete group:{1}", membershipUserId, slug); throw new SecurityException($"Error: User does not have access"); } var entityLikeDto = new EntityLikeDto() { EntityId = entityId, MembershipUserId = membershipUserId, }; await _likeCommand.DeleteLikedEntityAsync(entityLikeDto, cancellationToken); }
public async Task LikeEntityAsync(Guid membershipUserId, string slug, Guid entityId, CancellationToken cancellationToken) { if (Guid.Empty == membershipUserId) { throw new ArgumentOutOfRangeException(nameof(membershipUserId)); } if (Guid.Empty == entityId) { throw new ArgumentOutOfRangeException(nameof(entityId)); } var now = _systemClock.UtcNow.UtcDateTime; var userCanPerformAction = await _permissionsService.UserCanPerformActionAsync(membershipUserId, slug, LikeRole, cancellationToken); if (userCanPerformAction is not true) { _logger.LogError($"Error: LikeEntityAsync - User:{0} does not have access to like entity:{1}", membershipUserId, entityId); throw new SecurityException($"Error: User does not have access"); } var entityLikeDto = new EntityLikeDto() { EntityId = entityId, CreatedAtUTC = now, MembershipUserId = membershipUserId, }; await _likeCommand.CreateLikedEntityAsync(entityLikeDto, cancellationToken); }
public async Task CreateLikedEntityAsync(EntityLikeDto entityLike, CancellationToken cancellationToken) { try { const string query = @" IF EXISTS (SELECT 1 FROM [dbo].[Comment] WHERE [Entity_Id] = @Entity_Id AND [CreatedBy] = @MembershipUser_Id) RETURN ELSE INSERT INTO [dbo].[Entity_Like] ([Entity_Id] ,[MembershipUser_Id] ,[CreatedAtUTC]) VALUES (@Entity_Id ,@MembershipUser_Id ,@CreatedAtUTC)" ; var queryDefinition = new CommandDefinition(query, new { Entity_Id = entityLike.EntityId, MembershipUser_Id = entityLike.MembershipUserId, CreatedAtUTC = entityLike.CreatedAtUTC }, cancellationToken: cancellationToken); using var dbConnection = await _connectionFactory.GetReadWriteConnectionAsync(cancellationToken); var result = await dbConnection.ExecuteAsync(queryDefinition); if (result != 1) { _logger.LogError("Error: User request to like was not successful. User unable to like their own comment.", queryDefinition); throw new DBConcurrencyException("Error: User unable to like their own comment."); } } catch (SqlException ex) { _logger.LogError(ex, "Error: User request to create was not successful."); throw new DBConcurrencyException("Error: User request to like was not successful."); } }