private dynamic Execute(IEventPublisher eventPublisher, ISessionsRepository sessionsRepository, IMessagesRepository messagesRepository, DeleteMessage command)
        {
            var sessionId = new SessionId(command.SessionId);

            var deleter = sessionsRepository.GetUserIdOfSession(sessionId);

            if (!deleter.HasValue)
            {
                return(Negotiate.WithStatusCode(HttpStatusCode.Forbidden).WithModel("Invalid session"));
            }

            var messageId        = new MessageId(command.MessageId);
            var messageToDeleted = messagesRepository.Get(messageId);

            messageToDeleted.Delete(eventPublisher, deleter.Value);

            return(Negotiate.WithStatusCode(HttpStatusCode.OK).WithModel("Message deleted"));
        }