//GET api/posts public IQueryable<PostModel> GetAll( [ValueProvider(typeof(HeaderValueProviderFactory<string>))] string sessionKey) { var context = new BloggingSystemContext(); var responseMsg = this.PerformOperationAndHandleExceptionsWithSessionKey( sessionKey, context, () => { var postEntities = context.Posts; var models = (from p in postEntities select new PostModel() { Id = p.Id, Title = p.Title, Text = p.Text, PostDate = p.PostDate, PostedBy = p.User.Displayname, Tags = (from t in p.Tags select t.Content), Comments = (from c in p.Comments select new CommentModel() { Text = c.Text, CommentedBy = p.User.Displayname, PostDate = c.PostDate }) }); return models.OrderByDescending(p => p.PostDate); }); return responseMsg; }
public IQueryable<GetAllTagsModel> GetAll(string sessionKey) { var responseMsg = this.PerformOperationAndHandleExceptions(() => { var context = new BloggingSystemContext(); var user = context.Users.FirstOrDefault(usr => usr.SessionKey == sessionKey); if (user == null) { throw new InvalidOperationException("Invalid username or password"); } var tagEntities = context.Tags; IQueryable<GetAllTagsModel> models = (from postEntity in tagEntities select new GetAllTagsModel() { Id = postEntity.Id, Name = postEntity.Name, Posts = postEntity.Posts.Count(), }); return models.OrderByDescending(t => t.Id); }); return responseMsg; }
static void Main() { //Database.SetInitializer(new DropCreateDatabaseAlways<BloggingSystemContext>()); //Database.SetInitializer(new CreateDatabaseIfNotExists<BloggingSystemContext>()); //Database.SetInitializer(new MigrateDatabaseToLatestVersion<StudentsContext, Configuration>()); using (var context = new BloggingSystemContext()) { context.Database.Initialize(force: true); } }
public HttpResponseMessage PostRegisterUser(UserModel model) { var responseMsg = this.PerformOperationAndHandleExceptions(() => { var context = new BloggingSystemContext(); using (context) { this.ValidateUsername(model.Username); this.ValidateDisplayname(model.Displayname); this.ValidateAuthCode(model.AuthCode); var usernameToLower = model.Username.ToLower(); var displaynameToLower = model.Displayname.ToLower(); var user = context.Users.FirstOrDefault(usr => usr.Username == usernameToLower || usr.Displayname.ToLower() == displaynameToLower); if (user != null) { throw new InvalidOperationException("User exists"); } user = new User() { Username = usernameToLower, Displayname = model.Displayname, AuthCode = model.AuthCode }; context.Users.Add(user); context.SaveChanges(); user.SessionKey = this.GenerateSessionKey(user.Id); context.SaveChanges(); var loggedModel = new LoggedUserModel() { Displayname = user.Displayname, SessionKey = user.SessionKey }; var response = this.Request.CreateResponse(HttpStatusCode.Created, loggedModel); return response; } }); return responseMsg; }
public IQueryable<PostModel> GetAll(string sessionKey) { var responseMsg = this.PerformOperationAndHandleExceptions(() => { var context = new BloggingSystemContext(); var user = context.Users.FirstOrDefault(usr => usr.SessionKey == sessionKey); if (user == null) { throw new InvalidOperationException("Invalid username or password"); } var postEntities = context.Posts; IQueryable<PostModel> models = GetPostModelsFromDb(postEntities); return models.OrderByDescending(thr => thr.PostDate); }); return responseMsg; }
public HttpResponseMessage PostLoginUser(UserModel model) { var responseMsg = this.PerformOperationAndHandleExceptions( () => { var context = new BloggingSystemContext(); using (context) { this.ValidateUsername(model.Username); this.ValidateAuthCode(model.AuthCode); var usernameToLower = model.Username.ToLower(); var user = context.Users.FirstOrDefault( usr => usr.Username == usernameToLower && usr.AuthCode == model.AuthCode); if (user == null) { throw new InvalidOperationException("Invalid username or password"); } if (user.SessionKey == null) { user.SessionKey = this.GenerateSessionKey(user.Id); context.SaveChanges(); } var loggedModel = new LoggedUserModel() { DisplayName = user.DisplayName, SessionKey = user.SessionKey }; var response = this.Request.CreateResponse(HttpStatusCode.Created, loggedModel); return response; } }); return responseMsg; }
// GET api/tags/{tagId}/posts (where the tag is "more") public IQueryable<PostModel> GetPosts(int tagId, [ValueProvider(typeof(HeaderValueProviderFactory<string>))] string sessionKey) { var context = new BloggingSystemContext(); var responseMsg = this.PerformOperationAndHandleExceptionsWithSessionKey( sessionKey, context, () => { var tag = context.Tags.FirstOrDefault(t => t.Id == tagId); if (tag == null) { throw new ArgumentException("Tag Id is not valid"); } var postEntities = context.Posts; var models = (from p in postEntities where p.Tags.Any(x => x.Id == tagId) select new PostModel() { Id = p.Id, Title = p.Title, Text = p.Text, PostDate = p.PostDate, PostedBy = p.User.Displayname, Tags = (from t in p.Tags select t.Content), Comments = (from c in p.Comments select new CommentModel() { Text = c.Text, CommentedBy = p.User.Displayname, PostDate = c.PostDate }) }); return models.OrderByDescending(p => p.PostDate); }); return responseMsg; }
// GET api/tags public IQueryable<TagModel> GetAll( [ValueProvider(typeof(HeaderValueProviderFactory<string>))] string sessionKey) { var context = new BloggingSystemContext(); var responseMsg = this.PerformOperationAndHandleExceptionsWithSessionKey( sessionKey, context, () => { var tagsEntities = context.Tags; var models = (from t in tagsEntities select new TagModel() { Id = t.Id, Name = t.Content, Posts = (context.Posts.Where( p => p.Tags.Any(x => x.Content == t.Content)).Count()) }); return models.OrderByDescending(t => t.Id); }); return responseMsg; }
public HttpResponseMessage PutLogoutUser(string sessionKey) { var context = new BloggingSystemContext(); var user = context.Users.FirstOrDefault(u => u.SessionKey == sessionKey); user.SessionKey = null; context.SaveChanges(); var response = this.Request.CreateResponse(HttpStatusCode.OK); return response; }
public HttpResponseMessage PutLogoutUser( [ValueProvider(typeof(HeaderValueProviderFactory<string>))] string sessionKey) { var responseMsg = this.PerformOperationAndHandleExceptions(() => { var context = new BloggingSystemContext(); using (context) { var user = context.Users.FirstOrDefault(u => u.SessionKey == sessionKey); if (user != null) { user.SessionKey = null; context.SaveChanges(); } } var response = this.Request.CreateResponse(HttpStatusCode.OK); return response; }); return responseMsg; }
public HttpResponseMessage PostCreatePost(string sessionKey, RequestPostModel model) { var responseMsg = this.PerformOperationAndHandleExceptions( () => { var context = new BloggingSystemContext(); using (context) { var postCreatedBy = context.Users.FirstOrDefault(u => u.SessionKey == sessionKey); var post = new Post() { Title = model.Title, Text = model.Text, PostDate = DateTime.Now, User = postCreatedBy, //Tags = }; context.Posts.Add(post); context.SaveChanges(); // //IEnumerable<string> modelTagsParts = model.Tags.ToString().Split(new char[] { ' ', ',', '!', '?' }); //List<TagModel> tagModels = new List<TagModel>(); //foreach (var tagName in modelTagsParts) //{ // var tagInDb = context.Tags.FirstOrDefault(t => t.Name == tagName); // if (tagInDb == null) // { // var newTagModel = new TagModel() // { // Name = tagName // }; // tagModels.Add(newTagModel); // } // else // { // tagInDb.Post.Id = post.Id; // context.SaveChanges(); // } //} // var createdPost = new CreatedPostModel() { Id = post.Id, Title = post.Title }; var response = this.Request.CreateResponse(HttpStatusCode.Created, createdPost); return response; } }); return responseMsg; }
public HttpResponseMessage PutComment(string sessionKey, LeaveCommentModel commentModel, int postId) { var responseMsg = this.PerformOperationAndHandleExceptions( () => { var context = new BloggingSystemContext(); using (context) { var user = context.Users.FirstOrDefault(u => u.SessionKey == sessionKey); var post = context.Posts.FirstOrDefault(p => p.Id == postId); var comment = new Comment() { Text = commentModel.Text, User = user, Post = post, PostDate = DateTime.Now }; context.Comments.Add(comment); context.SaveChanges(); var response = this.Request.CreateResponse(HttpStatusCode.OK); return response; } }); return responseMsg; }
//POST api/posts/ public HttpResponseMessage PostCreate(PostModel post, [ValueProvider(typeof(HeaderValueProviderFactory<string>))] string sessionKey) { var context = new BloggingSystemContext(); var user = context.Users.FirstOrDefault(usr => usr.SessionKey == sessionKey); var responseMsg = this.PerformOperationAndHandleExceptionsWithSessionKey( sessionKey, context, () => { var newPost = new Post(); newPost.Title = post.Title; newPost.Text = post.Text; newPost.PostDate = DateTime.Now; newPost.User = user; newPost.Tags = new List<Tag>(); var pattern = new Regex( @"( [^\W_\d] # starting with a letter # followed by a run of either... ( [^\W_\d] | # more letters or [-'\d](?=[^\W_\d]) # ', -, or digit followed by a letter )* [^\W_\d] # and finishing with a letter )", RegexOptions.IgnorePatternWhitespace); foreach (Match m in pattern.Matches(newPost.Title)) { var tagContent = m.Groups[1].Value.ToLower(); if (context.Tags.FirstOrDefault(t => t.Content == tagContent) == null) { newPost.Tags.Add(new Tag() { Content = tagContent, }); } } context.Posts.Add(newPost); context.SaveChanges(); var createdPost = new CreatedPost() { Id = newPost.Id, Title = newPost.Title }; var response = this.Request.CreateResponse(HttpStatusCode.Created, createdPost); return response; }); return responseMsg; }
//PUT api/posts/{postId}/comment public HttpResponseMessage PutComment(CommentModel comment, int postId, [ValueProvider(typeof(HeaderValueProviderFactory<string>))] string sessionKey) { var context = new BloggingSystemContext(); var responseMsg = this.PerformOperationAndHandleExceptionsWithSessionKey( sessionKey, context, () => { var post = context.Posts.FirstOrDefault(p => p.Id == postId); if (post != null) { post.Comments.Add(new Comment() { Text = comment.Text, PostDate = DateTime.Now, }); } context.SaveChanges(); var response = this.Request.CreateResponse(HttpStatusCode.Created); return response; }); return responseMsg; }