Exemple #1
0
        public void Handle(TagChangedEvent evnt)
        {
            var key = KeyUtils.GetStateKey(evnt.AggregateId);

            var state = _db.GetObject <BlogState>(key);

            if (state == null)
            {
                throw new Exception("Blog has to be started first.");
            }

            var tags = state
                       .Posts
                       .SelectMany(_ => _.Tags)
                       .Where(_ => _.TagUrl == evnt.Url)
                       .ToList();

            foreach (var tag in tags)
            {
                tag.TagTitle = evnt.Title;
                tag.TagUrl   = evnt.Url;
            }

            _db.SetObject(key, state);
        }
Exemple #2
0
        public void Handle(LinkClosedEvent evnt)
        {
            var key = KeyUtils.GetStateKey(evnt.AggregateId);

            var state = _db.GetObject <BlogState>(key);

            if (state == null)
            {
                throw new Exception("Blog has to be started first.");
            }

            state.Links.RemoveAll(_ => _.Id == evnt.Url);

            _db.SetObject(key, state);
        }
Exemple #3
0
        public async Task <PostView> ExecuteAsync()
        {
            var key = KeyUtils.GetStateKey(_blogId);

            var state = await _db.GetObjectAsync <BlogState>(key);

            var post = state.Posts.FirstOrDefault(_ => _.Url == _postId);

            var links = state.Links.Select(_ => new LinkHomeView
            {
                Id    = _.Id,
                Title = _.Title,
                Order = _.Order
            });

            var result = new PostView
            {
                Id        = _blogId,
                Url       = _postId,
                Avatar    = state.Avatar,
                Brand     = state.Brand,
                Copyright = state.Copyright,
                Github    = state.Github,
                Linkedin  = state.Linkedin,
                Twitter   = state.Twitter,
                Title     = post.Title,
                Comments  = post.Comments,
                Infobar   = post.Infobar,
                Links     = links.ToList(),
                Body      = post.Body,
                Date      = post.PublishAt.ToShortDateString(),
                Category  = new CategoryHomeView {
                    Id = post.CategoryUrl, Title = post.CategoryTitle
                },
                Tags = post.Tags.Select(tag => new TagHomeView {
                    Id = tag.TagUrl, Title = tag.TagTitle
                }).ToList()
            };

            return(result);
        }
Exemple #4
0
        public void Handle(TagStartedEvent evnt)
        {
            var key = KeyUtils.GetStateKey(evnt.AggregateId);

            var state = _db.GetObject <BlogState>(key);

            if (state == null)
            {
                throw new Exception("Blog has to be started first.");
            }

            var tag = new TagState
            {
                TagUrl   = evnt.Url,
                TagTitle = evnt.Title
            };

            state.Tags.Add(tag);

            _db.SetObject(key, state);
        }
Exemple #5
0
        public void Handle(CategoryChangedEvent evnt)
        {
            var key = KeyUtils.GetStateKey(evnt.AggregateId);

            var state = _db.GetObject <BlogState>(key);

            if (state == null)
            {
                throw new Exception("Blog has to be started first.");
            }

            var posts = state.Posts.Where(_ => _.CategoryUrl == evnt.Url).ToList();

            foreach (var post in posts)
            {
                post.CategoryTitle = evnt.Title;
                post.CategoryUrl   = evnt.Url;
            }

            _db.SetObject(key, state);
        }
Exemple #6
0
        public void Handle(CategoryStartedEvent evnt)
        {
            var key = KeyUtils.GetStateKey(evnt.AggregateId);

            var state = _db.GetObject <BlogState>(key);

            if (state == null)
            {
                throw new Exception("Blog has to be started first.");
            }

            var category = new CategoryState
            {
                Url   = evnt.Url,
                Title = evnt.Title
            };

            state.Categories.Add(category);

            _db.SetObject(key, state);
        }
Exemple #7
0
        public void Handle(LinkStartedEvent evnt)
        {
            var key = KeyUtils.GetStateKey(evnt.AggregateId);

            var state = _db.GetObject <BlogState>(key);

            if (state == null)
            {
                throw new Exception("Blog has to be started first.");
            }

            var item = new LinkState
            {
                Id    = evnt.Url,
                Title = evnt.Title,
                Order = evnt.Order
            };

            state.Links.Add(item);

            _db.SetObject(key, state);
        }
Exemple #8
0
        public void Handle(PostStartedEvent evnt)
        {
            var key = KeyUtils.GetStateKey(evnt.AggregateId);

            var state = _db.GetObject <BlogState>(key);

            if (state == null)
            {
                throw new Exception("Blog has to be started first.");
            }

            var bodyHtml      = TextUtils.GetHtmlFromMarkdown(evnt.Body);
            var bodyShortHtml = TextUtils.GetHtmlFromMarkdown(TextUtils.GetBodyShort(evnt.Body));

            var tags = evnt.Tags.Select(_ => new TagState
            {
                TagUrl   = _.Url,
                TagTitle = _.Title
            }).ToList();

            var post = new PostState
            {
                Url           = evnt.Url,
                Title         = evnt.Title,
                Body          = bodyHtml,
                BodyShort     = bodyShortHtml,
                PublishAt     = evnt.PublishAt,
                CategoryTitle = evnt.CategoryTitle,
                CategoryUrl   = evnt.CategoryUrl,
                Infobar       = evnt.Infobar,
                IsHidden      = evnt.Hidden,
                Tags          = tags
            };

            state.Posts.Add(post);

            _db.SetObject(key, state);
        }
Exemple #9
0
        public void Handle(PostChangedEvent evnt)
        {
            var key = KeyUtils.GetStateKey(evnt.AggregateId);

            var state = _db.GetObject <BlogState>(key);

            if (state == null)
            {
                throw new Exception("Blog has to be started first.");
            }

            var post = state.Posts.FirstOrDefault(_ => _.Url == evnt.Url);

            if (post == null)
            {
                throw new Exception("Post should be created first.");
            }

            var tags = evnt.Tags.Select(_ => new TagState
            {
                TagUrl   = _.Url,
                TagTitle = _.Title
            }).ToList();

            post.Url           = evnt.Url;
            post.Title         = evnt.Title;
            post.BodyShort     = TextUtils.GetHtmlFromMarkdown(TextUtils.GetBodyShort(evnt.Body));
            post.Body          = TextUtils.GetHtmlFromMarkdown(evnt.Body);
            post.PublishAt     = evnt.PublishAt;
            post.CategoryTitle = evnt.CategoryTitle;
            post.CategoryUrl   = evnt.CategoryUrl;
            post.Infobar       = evnt.Infobar;
            post.IsHidden      = evnt.Hidden;
            post.Tags          = tags;

            _db.SetObject(key, state);
        }
Exemple #10
0
        public void Handle(BlogStartedEvent evnt)
        {
            var key = KeyUtils.GetStateKey(evnt.AggregateId);

            var state = _db.GetObject <BlogState>(key);

            if (state != null)
            {
                throw new Exception("There is a blog with the same host name in the store.");
            }

            state = new BlogState
            {
                Id        = evnt.AggregateId,
                Brand     = evnt.Brand,
                Copyright = evnt.Copyright,
                Avatar    = evnt.Avatar,
                Github    = evnt.Github,
                Twitter   = evnt.Twitter,
                Linkedin  = evnt.Linkedin
            };

            _db.SetObject(key, state);
        }
Exemple #11
0
        public async Task <HomeView> ExecuteAsync()
        {
            var key = KeyUtils.GetStateKey(_blogId);

            var filter = new FilterHomeView {
                By = "none"
            };

            var state = await _db.GetObjectAsync <BlogState>(key);

            var query = state.Posts.Where(_ => !_.IsHidden);

            if (!string.IsNullOrEmpty(_filterByDate))
            {
                var date = DateTime.Parse(_filterByDate);
                query  = query.Where(_ => _.PublishAt == date);
                filter = new FilterHomeView {
                    By = "date", Title = _filterByDate
                };
            }

            if (!string.IsNullOrEmpty(_filterByCategory))
            {
                query = query.Where(_ => !string.IsNullOrEmpty(_.CategoryUrl) && _.CategoryUrl.StartsWith(_filterByCategory));

                var category = state.Categories.FirstOrDefault(_ => _.Url == _filterByCategory);
                filter = new FilterHomeView {
                    By = "category", Title = category.Title
                };
            }

            if (!string.IsNullOrEmpty(_filterByTag))
            {
                query = query.Where(_ => _.Tags.Any(t => t.TagUrl == _filterByTag));

                var tag = state.Tags.FirstOrDefault(_ => _.TagUrl == _filterByTag);
                filter = new FilterHomeView {
                    By = "tag", Title = tag.TagTitle
                };
            }

            var posts = query
                        .OrderByDescending(_ => _.PublishAt)
                        .ToList();

            var links = state.Links.Select(_ => new LinkHomeView
            {
                Id    = _.Id,
                Title = _.Title,
                Order = _.Order
            });

            var result = new HomeView
            {
                Id        = _blogId,
                Avatar    = state.Avatar,
                Brand     = state.Brand,
                Copyright = state.Copyright,
                Github    = state.Github,
                Linkedin  = state.Linkedin,
                Twitter   = state.Twitter,
                Links     = links.ToList(),
                Filter    = filter,
                Posts     = posts
                            .Skip(_pageIndex * _pageSize)
                            .Take(_pageSize)
                            .Select(_ => new PostHomeView
                {
                    Id       = _.Url,
                    Url      = _.Url,
                    Title    = _.Title,
                    Short    = _.BodyShort,
                    Date     = _.PublishAt.ToString("dd-MM-yyyy"),
                    Category = new CategoryHomeView {
                        Id = _.CategoryUrl, Title = _.CategoryTitle
                    },
                    Tags = _.Tags.Select(tag => new TagHomeView {
                        Id = tag.TagUrl, Title = tag.TagTitle
                    }).ToList()
                })
                            .ToList(),
                PageIndex  = _pageIndex,
                PageSize   = _pageSize,
                PagesCount = (int)Ceiling(posts.Count / (double)_pageSize)
            };

            return(result);
        }
Exemple #12
0
        public void Handle(BlogClosedEvent evnt)
        {
            var key = KeyUtils.GetStateKey(evnt.AggregateId);

            _db.KeyDelete(key);
        }