Ejemplo n.º 1
0
        public async Task <IActionResult> EditMessage([Required][ValidateGuid][FromRoute] string messageId,
                                                      [Required][FromBody] MessageDataModel messageData)
        {
            var message = await _messagesService.GetMessageByIdAsync(messageId);

            if (message == null)
            {
                return(NotFound(new ApiError("Message with specified Id was not found", HttpStatusCode.NotFound)));
            }

            var chat = await _chatsService.GetByIdAsync(message.ChatId);

            var isChatParticipant = await _authorizationService.AuthorizeAsync(User, chat, "ChatParticipant");

            if (!isChatParticipant.Succeeded)
            {
                return(NotFound(new ApiError("Message with specified Id was not found", HttpStatusCode.NotFound)));
            }

            var authResult = await _authorizationService.AuthorizeAsync(User, message, "SameUser");

            if (!authResult.Succeeded)
            {
                var authError = new ApiError("You are not message author", HttpStatusCode.Unauthorized);
                return(StatusCode(StatusCodes.Status403Forbidden, authError));
            }

            try
            {
                await _messagesService.EditMessageAsync(messageId, messageData);
            }
            catch (ItemNotFoundException e)
            {
                return(BadRequest(new ApiError(e.Message, HttpStatusCode.BadRequest)));
            }
            catch (InvalidOperationException e)
            {
                return(BadRequest(new ApiError(e.Message, HttpStatusCode.BadRequest)));
            }

            return(Ok(message));
        }