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); } }
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)); }
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); }
public static Post GetPost(this PostState state) { return(new Post() { Content = state.Content, Description = state.Description, Source = state.Source, Title = state.Title }); }
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); }