コード例 #1
0
        public HttpResponseMessage RegisterUser(UserModel model)
        {
            return this.ExecuteOperationAndHandleExceptions(() =>
            {
                this.ValidateUser(model);
                this.ValidateEmail(model.Email);

                var context = new AdvertisementSystemContext();
                var dbUser = GetUserByUsernameOrEmail(model, context);
                if (dbUser != null)
                {
                    throw new InvalidOperationException("This user already exists in the database");
                }
                dbUser = new User()
                {
                    Username = model.Username,
                    Email = model.Email,
                    AuthenticationCode = model.AuthCode
                };
                context.Users.Add(dbUser);

                context.SaveChanges();

                var responseModel = new RegisterUserResponseModel()
                {
                    Id = dbUser.Id,
                    Username = dbUser.Username,
                };

                var response = this.Request.CreateResponse(HttpStatusCode.Created, responseModel);
                return response;
            });
        }
コード例 #2
0
        public HttpResponseMessage LoginUser(UserModel model)
        {
            return this.ExecuteOperationAndHandleExceptions(() =>
            {
                //this.ValidateUser(model);
                if (model == null)
                {
                    throw new FormatException("invalid username and/or password");
                }
                this.ValidateAuthCode(model.AuthCode);
                try
                {
                    this.ValidateUsername(model.Username);
                }
                catch (Exception ex)
                {
                    this.ValidateEmail(model.Email);
                }

                var context = new AdvertisementSystemContext();
                var username = ((string.IsNullOrEmpty(model.Username)) ? model.Email : model.Username).ToLower();
                var user = context.Users.FirstOrDefault(u => u.Username == username || u.Email == username);
                if (user == null)
                {
                    throw new InvalidOperationException("Invalid username or password");
                }
                if (user.AccessToken == null)
                {
                    user.AccessToken = this.GenerateAccessToken(user.Id);
                    context.SaveChanges();
                }
                var responseModel = new LoginResponseModel()
                {
                    Id = user.Id,
                    Username = user.Username,
                    AccessToken = user.AccessToken
                };
                var response = this.Request.CreateResponse(HttpStatusCode.OK, responseModel);
                return response;
            });
        }
コード例 #3
0
        public HttpResponseMessage LogoutUser(
            [ValueProvider(typeof(HeaderValueProviderFactory<string>))]
            string accessToken)
        {
            return this.ExecuteOperationAndHandleExceptions(() =>
            {
                var context = new AdvertisementSystemContext();
                var user = this.GetUserByAccessToken(accessToken, context);
                user.AccessToken = null;
                context.SaveChanges();

                var response = this.Request.CreateResponse(HttpStatusCode.NoContent);
                return response;
            });
        }
コード例 #4
0
        public HttpResponseMessage PostNewTag(
            [FromBody] TagModel model,
            [ValueProvider(typeof(HeaderValueProviderFactory<string>))] string accessToken)
        {
            var responseMsg = this.ExecuteOperationAndHandleExceptions(() =>
            {
                var context = new AdvertisementSystemContext();
                context.Tags.Add(new Tag()
                {
                    Title = model.Name
                });

                context.SaveChanges();

                return this.Request.CreateResponse(HttpStatusCode.Created);
            });

            return responseMsg;
        }
コード例 #5
0
        public HttpResponseMessage PostAdvertisement(
            [FromBody]AdvertisementModel model,
            [ValueProvider(typeof(HeaderValueProviderFactory<string>))] string accessToken)
        {
            var responseMsg = this.ExecuteOperationAndHandleExceptions(() =>
            {
                ValidateText(model.Text);
                ValidateTitle(model.Title);

                var context = new AdvertisementSystemContext();
                using (context)
                {
                    var user = this.GetUserByAccessToken(accessToken, context);

                    if (user == null)
                    {
                        throw new InvalidOperationException("You are not logged in!");
                    }

                    var category = context.Categories.FirstOrDefault(x => x.Id == model.CategoryId);

                    var advert = new Advertisement()
                    {
                        Title = model.Title,
                        Text = model.Text,
                        PostDate = DateTime.Now,
                        ExparationDate = DateTime.Now,
                        User = user,
                        Category = category
                    };

                    HashSet<string> allTags = new HashSet<string>();
                    foreach (var tag in model.Tags)
                    {
                        var lowerTag = tag.ToLower();
                        if (!allTags.Contains(lowerTag))
                        {
                            allTags.Add(lowerTag);
                        }
                    }

                    string[] splitedTitle = model.Title.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                    foreach (var tag in splitedTitle)
                    {
                        var lowerTag = tag.ToLower();
                        if (!allTags.Contains(lowerTag))
                        {
                            allTags.Add(lowerTag);
                        }
                    }

                    foreach (var tag in allTags)
                    {
                        var newTag = context.Tags.Where(t => t.Title == tag).FirstOrDefault();

                        if (newTag == null)
                        {
                            newTag = new Tag()
                            {
                                Title = tag
                            };
                        }

                        advert.Tags.Add(newTag);
                    }

                    context.Advertisements.Add(advert);
                    context.SaveChanges();

                    PostAdvertisementResponseModel responseModel = new PostAdvertisementResponseModel()
                    {
                        Id = advert.Id,
                        Title = advert.Title
                    };

                    return Request.CreateResponse(HttpStatusCode.Created, responseModel);
                }
            });

            return responseMsg;
        }
コード例 #6
0
        public HttpResponseMessage PutNewComment(
            int postId,
            [FromBody] CommentModel model,
            [ValueProvider(typeof(HeaderValueProviderFactory<string>))] string accessToken)
        {
            var responseMsg = this.ExecuteOperationAndHandleExceptions(() =>
            {
                ValidateCommentText(model.Text);

                var context = new AdvertisementSystemContext();

                var user = this.GetUserByAccessToken(accessToken, context);

                if (user == null)
                {
                    throw new InvalidOperationException("You are not logged in!");
                }

                var advert = context.Advertisements.FirstOrDefault(ps => ps.Id == postId);

                if (advert == null)
                {
                    throw new InvalidOperationException("No such post exists");
                }

                Comment newComment = new Comment()
                {
                    Text = model.Text,
                    CommentDate = DateTime.Now,
                    User = user,
                    Post = advert
                };

                context.Comments.Add(newComment);
                context.SaveChanges();

                return Request.CreateResponse(HttpStatusCode.Created);

            });

            return responseMsg;
        }
コード例 #7
0
        public HttpResponseMessage PostNewCategory(
            [FromBody] CategoryModel model,
            [ValueProvider(typeof(HeaderValueProviderFactory<string>))] string accessToken)
        {
            var responseMsg = this.ExecuteOperationAndHandleExceptions(() => 
            {
                var context = new AdvertisementSystemContext();
                var hasCat = context.Categories.FirstOrDefault(x => x.Name == model.Name);

                if (hasCat != null)
                {
                    throw new ArgumentException("Category exists!");
                }

                Category newCat = new Category()
                {
                    Name = model.Name
                };

                context.Categories.Add(newCat);
                context.SaveChanges();

                return this.Request.CreateResponse(HttpStatusCode.Created, newCat);
            });

            return responseMsg;
        }