Ejemplo n.º 1
0
        public IHttpActionResult PostReview([FromBody] CreateRestaurantReviewApiModel createRestaurantReviewApiModel)
        {
            var restaurantReviewsV1Manager = new RestaurantReviewsV1Manager();

            int newRestaurantReviewApiId;
            ResponseBllModel responseBllModel = restaurantReviewsV1Manager.PostRestaurantReview(createRestaurantReviewApiModel, out newRestaurantReviewApiId);

            if (responseBllModel.Result == ResultEnum.Success)
            {
                return(Ok(newRestaurantReviewApiId));
            }
            else
            {
                return(GetResponseApiActionResult(responseBllModel));
            }
        }
        public ResponseBllModel PostRestaurantReview(CreateRestaurantReviewApiModel createRestaurantReviewApiModel, out int newRestaurantReviewApiId)
        {
            newRestaurantReviewApiId = 0;

            try
            {
                //Validation checks:
                string parameterName;
                if (createRestaurantReviewApiModel == null)
                {
                    parameterName = "createRestaurantReviewApiModel";
                    return(new ResponseBllModel
                    {
                        Result = ResultEnum.MissingParameter,
                        ParameterName = parameterName,
                        ErrorMessage = MessageHelper.GetMissingParameterErrorMessage(parameterName)
                    });
                }
                if (createRestaurantReviewApiModel.RestaurantApiId < 1)
                {
                    parameterName = "createRestaurantReviewApiModel.RestaurantApiId";
                    return(new ResponseBllModel
                    {
                        Result = ResultEnum.MissingParameter,
                        ParameterName = parameterName,
                        ErrorMessage = MessageHelper.GetMissingParameterErrorMessage(parameterName)
                    });
                }
                if (string.IsNullOrWhiteSpace(createRestaurantReviewApiModel.ReviewerEmail))
                {
                    parameterName = "createRestaurantReviewApiModel.ReviewerEmail";
                    return(new ResponseBllModel
                    {
                        Result = ResultEnum.MissingParameter,
                        ParameterName = parameterName,
                        ErrorMessage = MessageHelper.GetMissingParameterErrorMessage(parameterName)
                    });
                }
                if (createRestaurantReviewApiModel.NumberOfStars < 1 || createRestaurantReviewApiModel.NumberOfStars > 5)
                {
                    parameterName = "createRestaurantReviewApiModel.NumberOfStars";
                    return(new ResponseBllModel
                    {
                        Result = ResultEnum.InvalidParameter,
                        ParameterName = parameterName,
                        ErrorMessage = MessageHelper.GetInvalidParameterErrorMessage(parameterName, "Its valid values can only be 1 through 5.")
                    });
                }
                //The Text field is optional.

                using (var dbContext = new RestaurantReviewsDbEntities())
                {
                    //Validation check for the RestaurantApiId.
                    var foundRestaurant = (from r in dbContext.Restaurants
                                           where r.SystemId == createRestaurantReviewApiModel.RestaurantApiId
                                           select new
                    {
                        r.SystemId
                    }).FirstOrDefault();
                    if (foundRestaurant == null)
                    {
                        parameterName = "createRestaurantReviewApiModel.RestaurantApiId";
                        return(new ResponseBllModel
                        {
                            Result = ResultEnum.InvalidParameter,
                            ParameterName = parameterName,
                            ErrorMessage = MessageHelper.GetInvalidParameterErrorMessage(parameterName, string.Concat("The invalid value is: ", createRestaurantReviewApiModel.RestaurantApiId))
                        });
                    }

                    Reviewer reviewer = (from rv in dbContext.Reviewers
                                         where rv.Email == createRestaurantReviewApiModel.ReviewerEmail
                                         select rv).FirstOrDefault();

                    DateTime utcNow = DateTime.UtcNow;
                    if (reviewer == null)
                    {
                        reviewer = new Reviewer
                        {
                            Email        = createRestaurantReviewApiModel.ReviewerEmail,
                            CreatedDate  = utcNow,
                            ModifiedDate = utcNow
                        };

                        dbContext.Reviewers.Add(reviewer);
                    }

                    var restaurantReview = new RestaurantReview
                    {
                        RestaurantSystemId = createRestaurantReviewApiModel.RestaurantApiId,
                        ReviewerSystemId   = reviewer.SystemId,
                        ReviewDate         = utcNow,
                        NumberOfStars      = createRestaurantReviewApiModel.NumberOfStars,
                        Text         = createRestaurantReviewApiModel.Text,
                        CreatedDate  = utcNow,
                        ModifiedDate = utcNow
                    };

                    dbContext.RestaurantReviews.Add(restaurantReview);
                    dbContext.SaveChanges();

                    newRestaurantReviewApiId = restaurantReview.SystemId;
                }

                return(new ResponseBllModel
                {
                    Result = ResultEnum.Success
                });
            }
            catch (Exception ex)
            {
                return(GetUnexpectedErrorResponseBllModel(ex));
            }
        }