Exemplo n.º 1
0
        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.");
            }
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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.");
            }
        }