예제 #1
0
        public HomeModule(IViewProjectionFactory viewFactory, ISpamShieldService spamShield, ICommandInvokerFactory commandInvokerFactory)
            : base(viewFactory)
        {
            _viewFactory = viewFactory;
            _commandInvokerFactory = commandInvokerFactory;

            Get["/"] = p =>
                ReturnHomeAction(new RecentBlogPostsBindingModel() { Page = 1, Take = 10 });

            Get["/page/{page:int}"] = p =>
                ReturnHomeAction(new RecentBlogPostsBindingModel() { Page = p.page, Take = 10 });

            Get["/tag/{Tag}"] = p =>
                ReturnArticlesTaggedBy(new TaggedBlogPostsBindingModel() { Tag = p.tag });

            Get[@"/(?<year>\d{4})/(?<month>0[1-9]|1[0-2])/(?<titleslug>[a-zA-Z0-9_-]+)"] = p =>
                ReturnArticle(new BlogPostDetailsBindingModel { Permalink = p.titleslug }, spamShield);//TODO:需要增加对日期有效性的验证

            Get[@"/(?<year>\d{4})/(?<month>0[1-9]|1[0-2])"] = p =>
                                                {
                                                    var input = new IntervalBlogPostsBindingModel
                                                    {
                                                        FromDate = new DateTime(p.year, p.month, 1)
                                                    };

                                                    input.ToDate = input.FromDate.AddMonths(1);

                                                    return ReturnArticles(input);
                                                };

            Post["/spam/hash/{tick}"] = p => spamShield.GenerateHash(p.tick);

            Post["/comment/(?<titleslug>[a-zA-Z0-9_-]+)"] = p => ReturnAddComment(p);
        }
예제 #2
0
        public dynamic ReturnArticle(BlogPostDetailsBindingModel input, ISpamShieldService spamShield)
        {
            var model = _viewFactory.Get<BlogPostDetailsBindingModel, BlogPostDetailsViewModel>(input);

            if (model == null)
                return HttpStatusCode.NotFound;

            ViewBag.Title = model.BlogPost.Title;

            ViewBag.Tick = spamShield.CreateTick(input.Permalink);

            return View["details", model];
        }
예제 #3
0
        public dynamic ReturnArticle(BlogPostDetailsBindingModel input, ISpamShieldService spamShield)
        {
            var model = _viewFactory.Get <BlogPostDetailsBindingModel, BlogPostDetailsViewModel>(input);

            if (model == null)
            {
                return(HttpStatusCode.NotFound);
            }

            ViewBag.Title = model.BlogPost.Title;

            ViewBag.Tick = spamShield.CreateTick(input.Permalink);

            return(View["details", model]);
        }
예제 #4
0
        public HomeModule(IViewProjectionFactory viewFactory, ISpamShieldService spamShield, ICommandInvokerFactory commandInvokerFactory)
            : base(viewFactory)
        {
            _viewFactory           = viewFactory;
            _commandInvokerFactory = commandInvokerFactory;

            Get["/"] = p =>
                       ReturnHomeAction(new RecentBlogPostsBindingModel()
            {
                Page = 1, Take = 10
            });

            Get["/page/{page:int}"] = p =>
                                      ReturnHomeAction(new RecentBlogPostsBindingModel()
            {
                Page = p.page, Take = 10
            });

            Get["/tag/{Tag}"] = p =>
                                ReturnArticlesTaggedBy(new TaggedBlogPostsBindingModel()
            {
                Tag = p.tag
            });

            Get[@"/(?<year>\d{4})/(?<month>0[1-9]|1[0-2])/(?<titleslug>[a-zA-Z0-9_-]+)"] = p =>
                                                                                           ReturnArticle(new BlogPostDetailsBindingModel {
                Permalink = p.titleslug
            }, spamShield);                                                                            //TODO:需要增加对日期有效性的验证

            Get[@"/(?<year>\d{4})/(?<month>0[1-9]|1[0-2])"] = p =>
            {
                var input = new IntervalBlogPostsBindingModel
                {
                    FromDate = new DateTime(p.year, p.month, 1)
                };

                input.ToDate = input.FromDate.AddMonths(1);

                return(ReturnArticles(input));
            };

            Post["/spam/hash/{tick}"] = p => spamShield.GenerateHash(p.tick);

            Post["/comment/(?<titleslug>[a-zA-Z0-9_-]+)"] = p => ReturnAddComment(p);
        }
예제 #5
0
 public NewCommentCommandInvoker(DB.AutoBox db, ISpamShieldService spamShield)
 {
     _db         = db;
     _spamShield = spamShield;
 }
예제 #6
0
 public NewCommentCommandInvoker(MongoCollections collections, ISpamShieldService spamShield)
 {
     _collections = collections;
     _spamShield  = spamShield;
 }
예제 #7
0
 public NewCommentCommandInvoker(Config dbConfig, ISpamShieldService spamShield)
 {
     _dbConfig   = dbConfig;
     _spamShield = spamShield;
 }