コード例 #1
0
        //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;
        }
コード例 #2
0
        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;
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
        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;
        }
コード例 #5
0
        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;
        }
コード例 #6
0
        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;
        }
コード例 #7
0
        // 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;
        }
コード例 #8
0
        // 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;
        }
コード例 #9
0
        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;
        }
コード例 #10
0
 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;
 }
コード例 #11
0
        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;
        }
コード例 #12
0
        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;
        }
コード例 #13
0
        //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;
        }
コード例 #14
0
        //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;
        }