Ejemplo n.º 1
0
        public async Task <HttpResult> AddEditGymReview([FromBody] GymReview review)
        {
            try
            {
                if (!Functions.UserLoggedIn(Request, out User user) && !Functions.AdminLoggedIn(Request, out _))
                {
                    throw new Exception("Not logged in!");
                }

                GymFinderGym gym = await db.GymFinderGym.FindAsync(review.GymId);

                if (gym == null)
                {
                    throw new Exception("Gym not found!");
                }

                DateTime now = DateTime.Now;

                if (review.Id > 0)
                {
                    GymReview updating = db.GymReview.Find(review.Id);
                    Functions.CheckNull(updating);

                    updating.ModifiedDate = now;
                    updating.Title        = review.Title;
                    updating.MainReview   = review.MainReview;
                    updating.GymId        = review.GymId;
                    updating.GoodPoints   = review.GoodPoints;
                    updating.BadPoints    = review.BadPoints;
                    updating.Rating       = review.Rating;

                    db.Entry(updating).State = Microsoft.EntityFrameworkCore.EntityState.Modified;

                    await db.SaveChangesAsync();
                }
                else
                {
                    review.CreationDate = now;
                    review.ModifiedDate = now;
                    review.ReviewerId   = user.Id;

                    db.GymReview.Add(review);

                    await db.SaveChangesAsync();
                }

                //updating gym rating.
                gym.AverageRating = db.GymReview.Where(x => x.GymId == gym.Id).Average(g => g.Rating);

                db.Entry(gym).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
                await db.SaveChangesAsync();

                return(new HttpResult(true, review, ""));
            }
            catch (Exception e)
            {
                return(new HttpResult(false, null, Functions.ErrorMessage(e)));
            }
        }
Ejemplo n.º 2
0
        public HttpResult GetGymReview([FromQuery] int id)
        {
            GymReview r = db.GymReview.Find(id);

            return(r == null
                ? new HttpResult(false, new GymReview(), "No Review")
                : new HttpResult(true, r, ""));
        }
Ejemplo n.º 3
0
        public HttpResult GetMyGymReview([FromQuery] int gymID)
        {
            if (!Functions.UserLoggedIn(Request, out User user) && !Functions.AdminLoggedIn(Request, out _))
            {
                return(new HttpResult(false, null, ""));
            }

            GymReview r = db.GymReview.FirstOrDefault(x => x.GymId == gymID && x.ReviewerId == user.Id);

            return(r == null
                ? new HttpResult(false, new GymReview(), "No Review")
                : new HttpResult(true, r, ""));
        }
Ejemplo n.º 4
0
        public async Task <HttpResult> DeleteGymReview([FromRoute] int postID)
        {
            try
            {
                //if (!Functions.AdminLoggedIn(Request, out _))
                //    throw new Exception("Not logged in!");

                GymReview deleting = await db.GymReview.FindAsync(postID);

                if (deleting == null)
                {
                    throw new Exception("Post not found!");
                }

                bool adminLoggedIn = Functions.AdminLoggedIn(Request, out _);
                bool userLoggedIn  = Functions.UserLoggedIn(Request, out User editor);

                if ((!adminLoggedIn && !userLoggedIn) || //no user logged in
                    (userLoggedIn && editor.Id != deleting.ReviewerId))       //or user logged in but does not own the review
                {
                    throw new Exception("Not logged in!");
                }

                //update coach rating
                GymFinderGym gym = await db.GymFinderGym.FindAsync(deleting.GymId);

                IQueryable <GymReview> remainingReviews = db.GymReview.Where(x => x.GymId == gym.Id && x.Id != deleting.Id);
                if (remainingReviews.Count() > 0)
                {
                    gym.AverageRating = remainingReviews.Average(c => c.Rating);
                }
                else
                {
                    gym.AverageRating = 0d;
                }
                db.Entry(gym).State = Microsoft.EntityFrameworkCore.EntityState.Modified;

                db.GymReview.Remove(deleting);

                await db.SaveChangesAsync();

                return(new HttpResult(true, null, ""));
            }
            catch (Exception e)
            {
                return(new HttpResult(false, null, Functions.ErrorMessage(e)));
            }
        }