public HttpResponseMessage PostAddPost(PostModel postData, [ValueProvider(typeof(HeaderValueProviderFactory<string>))] string sessionKey) { var responseMsg = this.PerformOperationAndHandleExceptions( () => { var context = new BloggingSystemContext(); using (context) { var user = GetAndValidateUser(sessionKey, context); ValidatePost(postData); var postEntity = new Post() { Text = postData.Text, Title = postData.Title }; postEntity.PostDate = DateTime.Now; postEntity.User = user; AddTags(context, postData, postEntity); AddTitleTags(context, postData, postEntity); context.Posts.Add(postEntity); context.SaveChanges(); var postCreatedModel = new PostCreatedModel() { Id = postEntity.Id, Title = postEntity.Title }; var response = this.Request.CreateResponse(HttpStatusCode.Created, postCreatedModel); return response; } }); return responseMsg; }
public HttpResponseMessage PostCreate(PostModel postModel, [ValueProvider(typeof(HeaderValueProviderFactory<string>))] string sessionKey) { var responseMsg = this.ExceptionHandling( () => { var context = new BloggingSystemContext(); using (context) { var user = context.Users.FirstOrDefault(u => u.SessionKey == sessionKey); if (user == null) { throw new InvalidOperationException("Invalid username or password!"); } List<string> tags = new List<string>(); tags = TakeTags(postModel.Title); foreach (var tagEntity in tags) { var tagInDb = context.Tags.FirstOrDefault(t => t.Name == tagEntity); if(tagInDb == null) { var tag = new Tag() { Name = tagEntity, User = user }; context.Tags.Add(tag); context.SaveChanges(); } } foreach (var tag in postModel.Tags) { var tagInDb = context.Tags.FirstOrDefault(t => t.Name == tag); if (tagInDb == null) { var newTag = new Tag() { Name = tag, User = user }; context.Tags.Add(newTag); context.SaveChanges(); } } var post = new Post() { Title = postModel.Title, Text = postModel.Text, User = user, PostDate = DateTime.Now }; context.Posts.Add(post); context.SaveChanges(); var postCreated = new PostCreatedModel() { Id = post.Id, Title = post.Title }; var response = this.Request.CreateResponse(HttpStatusCode.Created, postCreated); return response; } }); return responseMsg; }