コード例 #1
0
ファイル: UsersController.cs プロジェクト: quela/myprojects
        public HttpResponseMessage PostRegisterUser([FromBody]UserDto userDto)
        {
            var responseMsg = this.PerformOperationAndHandleExceptions(
                () =>
                {
                    if (userDto == null)
                    {
                        throw new ArgumentException("Cannot register an empty user.");
                    }

                    this.ValidateUsername(userDto.Username);
                    this.ValidateNickname(userDto.DisplayName);
                    this.ValidateAuthCode(userDto.AuthCode);

                    var db = new BlogContext();

                    var user = db.Users.Where(u =>
                        u.Username.ToLower() == userDto.Username.ToLower() || u.DisplayName.ToLower() == userDto.DisplayName.ToLower())
                        .FirstOrDefault();

                    if (user != null)
                    {
                        throw new ApplicationException("User exist.");
                    }

                    user = new User()
                    {
                        DisplayName = userDto.DisplayName,
                        Username = userDto.Username,
                        AuthCode = userDto.AuthCode
                    };

                    db.Users.Add(user);
                    db.SaveChanges();

                    string sessionKey = this.GenerateSessionKey(user.Id);
                    user.SessionKey = sessionKey;
                    db.SaveChanges();

                    var userLogedIn = new UserLogedDto()
                    {
                        DisplayName = user.DisplayName,
                        SessionKey = sessionKey
                    };

                    var response = this.Request.CreateResponse(HttpStatusCode.Created,
                                            userLogedIn);

                    return response;
                });

            return responseMsg;
        }
コード例 #2
0
ファイル: PostsController.cs プロジェクト: quela/myprojects
        public HttpResponseMessage Get([FromUri]string sessionKey, [FromUri]int page, [FromUri]int count)
        {
            var responseMsg = this.PerformOperationAndHandleExceptions(
                () =>
                {
                    if (sessionKey.Length != SessionKeyLength)
                    {
                        throw new ArgumentException("Invalid session key.");
                    }

                    var db = new BlogContext();

                    var user = db.Users.Where(u => u.SessionKey == sessionKey).FirstOrDefault();

                    if (user == null)
                    {
                        throw new ApplicationException("Invalin session. Try to login.");
                    }

                    var allPosts = (from t in db.Posts
                                    select new PostDto()
                                    {
                                        Id = t.Id,
                                        Title = t.Title,
                                        Content = t.Content,
                                        PostedBy = t.User.Username,
                                        PostDate = t.PostDate,
                                        Tags = t.Tags.Select(tag => tag.TagText),
                                        Comments = (from c in t.Comments
                                                    select new CommentDto()
                                                    {
                                                        Id = c.Id,
                                                        Text = c.Content,
                                                        PostDate = c.CommentDate,
                                                        CommentedBy = c.User.Username
                                                    })
                                    }).ToList();

                    var response = this.Request.CreateResponse(HttpStatusCode.OK,
                                            allPosts.OrderByDescending(d => d.PostDate)
                                            .Skip(page * count).Take(count));

                    return response;
                });

            return responseMsg;
        }
コード例 #3
0
ファイル: TagsController.cs プロジェクト: quela/myprojects
        public HttpResponseMessage Get([FromUri]string sessionKey)
        {
            var responseMsg = this.PerformOperationAndHandleExceptions(
                () =>
                {
                    if (sessionKey.Length != SessionKeyLength)
                    {
                        throw new ArgumentException("Invalid session key.");
                    }

                    var db = new BlogContext();

                    var user = db.Users.Where(u => u.SessionKey == sessionKey).FirstOrDefault();

                    if (user == null)
                    {
                        throw new ApplicationException("Invalin session. Try to login.");
                    }

                    var allPosts = (from t in db.Tags
                                    select new TagDto() 
                                    {
                                        Id = t.Id, 
                                        Name = t.TagText,
                                        Posts = db.Posts.Where(
                                        p => p.Tags.Any(tag => tag.TagText.ToLower() == t.TagText.ToLower()))
                                        .Count()
                                    }).ToList();

                    var response = this.Request.CreateResponse(HttpStatusCode.OK,
                                            allPosts.OrderByDescending(d => d.Name));

                    return response;
                });

            return responseMsg;
        }
コード例 #4
0
ファイル: PostsController.cs プロジェクト: quela/myprojects
        public HttpResponseMessage PutComment([FromUri]string sessionKey, [FromUri]int postId, [FromBody]CommentDto commentDto)
        {
            var responseMsg = this.PerformOperationAndHandleExceptions(
                () =>
                {
                    if (sessionKey.Length != SessionKeyLength)
                    {
                        throw new ArgumentException("Invalid session key.");
                    }

                    var db = new BlogContext();

                    var user = db.Users.Where(u => u.SessionKey == sessionKey).FirstOrDefault();

                    if (user == null)
                    {
                        throw new ApplicationException("Invalin session. Try to login.");
                    }

                    if (commentDto == null)
                    {
                        throw new ArgumentException("Comment is empty.");
                    }

                    if (commentDto.Text == null)
                    {
                        throw new ArgumentException("Comment text is empty.");
                    }

                    var postById = db.Posts.Where(p => p.Id == postId).FirstOrDefault();

                    if (postById == null)
                    {
                        throw new ApplicationException("Invalin post ID.");
                    }

                    Comment comment = new Comment() { Content = commentDto.Text, CommentDate = DateTime.Now, User = user };

                    postById.Comments.Add(comment);
                    db.SaveChanges();

                    var response = new HttpResponseMessage(HttpStatusCode.OK);
                    return response;
                });

            return responseMsg;
        }
コード例 #5
0
ファイル: PostsController.cs プロジェクト: quela/myprojects
        public HttpResponseMessage GetByTag([FromUri]string sessionKey, [FromUri]string tags)
        {
            var responseMsg = this.PerformOperationAndHandleExceptions(
                () =>
                {
                    if (sessionKey.Length != SessionKeyLength)
                    {
                        throw new ArgumentException("Invalid session key.");
                    }

                    if (tags == null)
                    {
                        throw new ArgumentException("Tags is empty.");
                    }

                    var db = new BlogContext();

                    var user = db.Users.Where(u => u.SessionKey == sessionKey).FirstOrDefault();

                    if (user == null)
                    {
                        throw new ApplicationException("Invalin session. Try to login.");
                    }

                    var listOfTags = tags.Split(new char[]{ ',' }, StringSplitOptions.RemoveEmptyEntries);

                    var listOfTagsLowerCase = new List<string>();
                    foreach (var tag in listOfTags)
                    {
                        listOfTagsLowerCase.Add(tag.ToLower());
                    }

                    var allPosts = (from t in db.Posts
                                    where t.Tags.Any(tag => listOfTagsLowerCase.Contains(tag.TagText.ToLower()))
                                    select new PostDto()
                                    {
                                        Id = t.Id,
                                        Title = t.Title,
                                        Content = t.Content,
                                        PostedBy = t.User.Username,
                                        PostDate = t.PostDate,
                                        Tags = t.Tags.Select(tag => tag.TagText),
                                        Comments = (from c in t.Comments
                                                    select new CommentDto()
                                                    {
                                                        Id = c.Id,
                                                        Text = c.Content,
                                                        PostDate = c.CommentDate,
                                                        CommentedBy = c.User.Username
                                                    })
                                    }).ToList();

                    var response = this.Request.CreateResponse(HttpStatusCode.OK,
                                            allPosts.OrderByDescending(d => d.PostDate));

                    return response;
                });

            return responseMsg;
        }
コード例 #6
0
ファイル: PostsController.cs プロジェクト: quela/myprojects
        public HttpResponseMessage Post([FromUri]string sessionKey, [FromBody]PostDto postDto)
        {
            var responseMsg = this.PerformOperationAndHandleExceptions(
                () =>
                {
                    var db = new BlogContext();

                    if (sessionKey.Length != SessionKeyLength)
                    {
                        throw new ArgumentException("Invalid session key.");
                    }

                    var user = db.Users.Where(u => u.SessionKey == sessionKey).FirstOrDefault();

                    if (user == null)
                    {
                        throw new ApplicationException("Invalin session. Try to login.");
                    }

                    if (postDto == null)
                    {
                        throw new ArgumentException("Cannot create empty post.");
                    }

                    if (postDto.Title == null)
                    {
                        throw new ArgumentException("Cannot create post without title");
                    }

                    if (postDto.Content == null)
                    {
                        throw new ArgumentException("Cannot create post without text");
                    }

                    var post = new Post() 
                    { 
                        Title = postDto.Title, 
                        Content = postDto.Content, 
                        PostDate = DateTime.Now
                    };

                    if (postDto.Tags != null)
                    {
                        foreach (var tag in postDto.Tags)
                        {
                            post.Tags.Add(new Tag() { TagText = tag });
                        }
                    }

                    var tagsFromTitle = 
                        postDto.Title.Split(new char[]{ ' ', ',', '.', '?', '!' }, StringSplitOptions.RemoveEmptyEntries);

                    foreach (var tag in tagsFromTitle)
                    {
                        post.Tags.Add(new Tag() { TagText = tag });
                    }

                    db.Posts.Add(post);
                    db.SaveChanges();

                    var responsPost = new PostCreateResponseDto() { Id = post.Id, Title = post.Title };

                    var response = this.Request.CreateResponse(HttpStatusCode.Created, responsPost);

                    return response;
                });

            return responseMsg;
        }
コード例 #7
0
ファイル: UsersController.cs プロジェクト: quela/myprojects
        public HttpResponseMessage LogoutUser([FromUri]string sessionKey)
        {
            var responseMsg = this.PerformOperationAndHandleExceptions(
            () =>
            {
                if (sessionKey.Length != SessionKeyLength)
                {
                    throw new ArgumentException("Invalid session key length.");
                }

                var db = new BlogContext();

                var user = db.Users.Where(u => u.SessionKey == sessionKey).FirstOrDefault();

                if (user == null)
                {
                    throw new ArgumentException("Invalid session key.");
                }

                user.SessionKey = null;
                db.SaveChanges();

                var response = new HttpResponseMessage(HttpStatusCode.OK);
                return response;
            });

            return responseMsg;
        }