Exemple #1
0
        async public Task <Post> Post(PostState state)
        {
            using (var ctx = _context.Rent())
            {
                var post     = state.GetPost();
                var parentId = state.ParentId;
                await ctx.AddAsync(post);

                var related = (state
                               ?? new PostState()
                {
                    EndDate = BlogDefault.MAX_DATE,
                    StartDate = BlogDefault.MAX_DATE
                })
                              .CreateRelated();
                await ctx.AddAsync(related);

                related.Current = post;
                var parentPost = ctx.Set <Post>().Find(parentId);
                ctx.Attach(parentPost).State = EntityState.Unchanged;
                var queryRelated = ctx.Set <PostRelated>().Include(p => p.Current);
                var parent       = await(queryRelated.FirstOrDefaultAsync(r => r.Current != null && r.Current.Id == parentPost.Id)
                                         ?? queryRelated.AsNoTracking().FirstOrDefaultAsync(r => r.Current.Id == Guid.Empty));
                parent.Posts = parent.Posts ?? new List <PostRelated>();
                parent.Posts.Add(related);
                await ctx.SaveChangesAsync();

                return(post);
            }
        }
Exemple #2
0
        async public Task <IActionResult> Post([FromBody] PostState state, [FromRoute] Guid parentId)
        {
            state.ParentId = parentId;
            var post = await _factory.Post(state);

            return(new CreatedResult($"{_accessor.HttpContext.Request.Path}/{post.Id}", post));
        }
Exemple #3
0
 public static PostState SetPost(this PostState state, Post post)
 {
     state.Content     = post.Content;
     state.Description = post.Description;
     state.Source      = post.Source;
     state.Title       = post.Title;
     return(state);
 }
Exemple #4
0
 public static Post GetPost(this PostState state)
 {
     return(new Post()
     {
         Content = state.Content,
         Description = state.Description,
         Source = state.Source,
         Title = state.Title
     });
 }
Exemple #5
0
 public static PostRelated CreateRelated(this PostState state, PostRelated related = null)
 {
     if (related == null)
     {
         related = new PostRelated();
     }
     related.Owner     = state.Owner;
     related.Level     = state.Level;
     related.EndDate   = state.EndDate;
     related.StartDate = state.StartDate;
     return(related);
 }