コード例 #1
0
        public MessagesNancyModule(IMessageListViewModelRetriever messageListViewModelRetriever
                                   , IHandlerFactory handlerFactory)
            : base("/messages")
        {
            Get("/{storeName}/{pageNumber?1}", parameters =>
            {
                var logger = LogProvider.GetLogger("MessagesNancyModule");
                logger.Log(LogLevel.Debug, () => "GET on messages");

                string storeName = parameters.storeName;
                int pageNumber   = parameters.pageNumber;
                ViewModelRetrieverResult <MessageListModel, MessageListModelError> messageListModelResult = messageListViewModelRetriever.Get(storeName, pageNumber);

                if (!messageListModelResult.IsError)
                {
                    return(Response.AsJson(messageListModelResult.Result));
                }
                switch (messageListModelResult.Error)
                {
                case (MessageListModelError.StoreNotFound):
                    return(Response.AsJson(new MessageViewerError(
                                               string.Format("Unknown store {0}", storeName)), HttpStatusCode.NotFound));

                case (MessageListModelError.StoreMessageViewerNotImplemented):
                    return(Response.AsJson(new MessageViewerError(
                                               string.Format("Found store {0} does not implement IMessageStoreViewer", storeName)), HttpStatusCode.NotFound));

                case (MessageListModelError.StoreMessageViewerGetException):
                    return(Response.AsJson(new MessageViewerError(
                                               string.Format("Unable to retrieve messages for store {0}", storeName)), HttpStatusCode.InternalServerError));

                case (MessageListModelError.GetActivationStateFromConfigError):
                    return(Response.AsJson(new MessageViewerError(
                                               string.Format("Misconfigured Message Viewer, unable to retrieve messages for store {0}", storeName)), HttpStatusCode.InternalServerError));

                default:
                    throw new Exception("Code can't reach here");
                }
            });

            Post("/{storeName}/repost/{msgList}", parameters =>
            {
                try
                {
                    var handler        = handlerFactory.GetHandler <RepostCommand>();
                    string ids         = parameters.msgList;
                    var repostModelIds = ids.Split(',');
                    var repostCommand  = new RepostCommand {
                        StoreName = parameters.storeName, MessageIds = repostModelIds.ToList()
                    };
                    handler.Handle(repostCommand);

                    return(Response.AsJson <int>(0, HttpStatusCode.OK));
                }
                catch (Exception e)
                {
                    return(e);
                }
            });
        }
コード例 #2
0
 private async Task <bool> TryRunRepostCommand(BotRequest botRequest)
 {
     if (MessageRepostRequest.IsRepostRequest(botRequest))
     {
         var command = new RepostCommand(botRequest.Messenger, botRequest.ChannelId, botRequest.UserId, botRequest.Text);
         return(await _mediator.Send(command));
     }
     return(false);
 }
コード例 #3
0
        public RepostCommandHandlerMissingStoreTests()
        {
            var fakeMessageStoreFactory = FakeMessageStoreViewerFactory.CreateEmptyFactory();

            _command = new RepostCommand {
                MessageIds = new List <string> {
                    Guid.NewGuid().ToString()
                }, StoreName = _storeName
            };
            _fakeMessageProducer = new FakeMessageProducer();
            _repostHandler       = new RepostCommandHandler(fakeMessageStoreFactory, new FakeMessageProducerFactoryProvider(new FakeMessageProducerFactory(_fakeMessageProducer)), new MessageRecoverer());
        }
コード例 #4
0
        public RepostCommandHandlerMessagesNotFoundTests()
        {
            var fakeStore = new FakeMessageStoreWithViewer();
            var fakeMessageStoreFactory = new FakeMessageStoreViewerFactory(fakeStore, _storeName);

            _command = new RepostCommand {
                MessageIds = new List <string> {
                    Guid.NewGuid().ToString()
                }, StoreName = _storeName
            };
            _fakeMessageProducer = new FakeMessageProducer();
            _repostHandler       = new RepostCommandHandler(fakeMessageStoreFactory, new FakeMessageProducerFactoryProvider(new FakeMessageProducerFactory(_fakeMessageProducer)), new MessageRecoverer());
        }
        public void Establish()
        {
            var fakeStore = new FakeMessageStoreWithViewer();

            _messageToRepost = new Message(new MessageHeader(Guid.NewGuid(), "a topic", MessageType.MT_COMMAND, DateTime.UtcNow), new MessageBody("body"));
            fakeStore.Add(_messageToRepost);
            var fakeMessageStoreFactory = new FakeMessageStoreViewerFactory(fakeStore, _storeName);

            _command = new RepostCommand {
                MessageIds = new List <string> {
                    _messageToRepost.Header.Id.ToString()
                }, StoreName = _storeName
            };
            _repostHandler = new RepostCommandHandler(fakeMessageStoreFactory, new FakeMessageProducerFactoryProvider(new FakeErrorProducingMessageProducerFactory()), new MessageRecoverer());
        }
コード例 #6
0
        public MessagesNancyModule(IMessageListViewModelRetriever messageListViewModelRetriever
                                    , IHandlerFactory handlerFactory)
            : base("/messages")
        {
            Get["/{storeName}/{pageNumber?1}"] = parameters =>
            {
                var logger = LogProvider.GetLogger("MessagesNancyModule");
                logger.Log(LogLevel.Debug, () => "GET on messages");

                string storeName = parameters.storeName;
                int pageNumber = parameters.pageNumber;
                ViewModelRetrieverResult<MessageListModel, MessageListModelError> messageListModelResult = messageListViewModelRetriever.Get(storeName, pageNumber);

                if (!messageListModelResult.IsError)
                {
                    return Response.AsJson(messageListModelResult.Result);                    
                }
                switch (messageListModelResult.Error)
                {
                    case(MessageListModelError.StoreNotFound):
                        return Response.AsJson(new MessageViewerError(
                            string.Format("Unknown store {0}", storeName)), HttpStatusCode.NotFound);
                    
                    case (MessageListModelError.StoreMessageViewerNotImplemented):
                        return Response.AsJson(new MessageViewerError(
                            string.Format("Found store {0} does not implement IMessageStoreViewer", storeName)), HttpStatusCode.NotFound);

                    case (MessageListModelError.StoreMessageViewerGetException):
                        return Response.AsJson(new MessageViewerError(
                            string.Format("Unable to retrieve messages for store {0}", storeName)), HttpStatusCode.InternalServerError);

                    case (MessageListModelError.GetActivationStateFromConfigError):
                        return Response.AsJson(new MessageViewerError(
                            string.Format("Misconfigured Message Viewer, unable to retrieve messages for store {0}", storeName)), HttpStatusCode.InternalServerError);
                    default:
                        throw new SystemException("Code can't reach here");
                }
            };
            Post["/{storeName}/repost/{msgList}"] = parameters =>
            {
                var handler = handlerFactory.GetHandler<RepostCommand>();
                string ids = parameters.msgList;
                var repostModelIds = ids.Split(',');
                var repostCommand = new RepostCommand { StoreName = parameters.storeName, MessageIds = repostModelIds.ToList() };
                handler.Handle(repostCommand);

                return Response.AsJson<int>(0, HttpStatusCode.OK);
            };
        }