public async Task <IActionResult> CreatePostAsync([FromBody] JsonApiPostDocument requestDocument) { var responseDocument = new JsonApiDocument(); if (requestDocument is null || requestDocument.Data is null || requestDocument.Data.Attributes is null) { return(this.BadRequest(responseDocument)); } var userId = ObjectId.Parse(this.userManager.GetUserId(this.User)); var post = requestDocument.Data.CreateDatabaseModel(); if (post.Body.Any(x => x.Type == "text" && string.IsNullOrEmpty(x.Text))) { return(this.BadRequest(responseDocument)); } post.OwnerId = userId; post.Id = ObjectId.GenerateNewId(); await this.forumManager.CreateAsync(post); responseDocument.Links = JsonApiPostResource.CreateLinks(post.Id); return(this.Accepted(responseDocument)); }
public async Task <IActionResult> GetPostAsync(string id) { var responseDocument = new JsonApiPostDocument(); if (!(ObjectId.TryParse(id, out var postId))) { return(this.NotFound(responseDocument)); } var post = await this.forumManager.FindByIdAsync(postId); if (post is null) { return(this.NotFound(responseDocument)); } responseDocument.Data = JsonApiPostResource.Create(post); foreach (var query in this.Request.Query) { switch (query.Key) { case "include": { var userDictionary = new Dictionary <ObjectId, JsonApiUserResource>(); foreach (var value in query.Value) { switch (value) { case "owner": { var resource = responseDocument.Data; if (!(resource.Relationships is null || resource.Relationships.Owner is null)) { var userId = ObjectId.Parse(resource.Relationships.Owner.Data.Id); if (!(userDictionary.ContainsKey(userId))) { var user = await this.userManager.FindByIdAsync(userId.ToString()); userDictionary[userId] = user.GetJsonApiResourceFor(user) as JsonApiUserResource; } } } break; } } if (userDictionary.Count > 0) { responseDocument.Included = new List <IJsonApiResource>(); foreach (var value in userDictionary.Values) { responseDocument.Included.Add(value); } } } break; } } responseDocument.Links = JsonApiPostResource.CreateLinks(post.Id); return(this.Ok(responseDocument)); }