Esempio n. 1
0
        public async Task <ActionResult <EditGymClassRequest> > editClass(EditGymClassRequest edit)
        {
            Users user = await userRepository.getUser(edit.EditorUsername);

            if (user == null)
            {
                return(StatusCode(StatusCodes.Status404NotFound, "User making the edit to the class was not found!"));
            }

            if (user.UserType != UserTypes.Manager && user.UserType != UserTypes.Instructor)
            {
                return(StatusCode(StatusCodes.Status401Unauthorized, "User making the edit is not a manager or instructor!"));
            }

            GymClasses target = await classRepository.getClassById(edit.ClassId);

            if (target == null)
            {
                return(StatusCode(StatusCodes.Status404NotFound, "The class you wish to edit does not exist!"));
            }

            ClassMappers.editRequestToGymClassModel(edit, target);

            target = await classRepository.editClass(target);

            if (target != null)
            {
                return(ClassMappers.classToClassRequestModel(target));
            }
            else
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, "Something went wrong trying to update the class!"));
            }
        }
Esempio n. 2
0
        public async Task <ActionResult <ClassRatingResponse> > getClassRating(int classid)
        {
            GymClasses gymClass = await classRepository.getClassById(classid);

            if (gymClass == null)
            {
                return(StatusCode(StatusCodes.Status404NotFound, "Specified class does not exist!"));
            }

            ClassRating rating = await classRatingRepository.getRating(classid);

            ClassRatingResponse response = new ClassRatingResponse();

            if (rating == null)
            {
                response.classId     = classid;
                response.ratingCount = 0;
                response.ratingSum   = 0;
            }
            else
            {
                response.classId     = rating.ClassIdForeignKey;
                response.ratingCount = rating.RatingCount;
                response.ratingSum   = rating.RatingSum;
            }

            return(Ok(response));
        }
        public ActionResult DeleteConfirmed(int id)
        {
            GymClasses gymClasses = db.GymClasses.Find(id);

            db.GymClasses.Remove(gymClasses);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
Esempio n. 4
0
        public async Task <ActionResult> cancelClass(CancelClassRequest classRequest)
        {
            GymClasses classToChange = await classRepository.getClassById(classRequest.classId);

            if (classToChange == null)
            {
                return(NotFound("This class ID does not exist."));
            }

            if (classToChange.InstructorUsername != classRequest.username)
            {
                return(Unauthorized("This instructor does not teach this class."));
            }

            string content       = "";
            string returnMessage = "";
            bool   oldWay        = classToChange.Cancelled;

            if (oldWay)
            {
                returnMessage = "This class has been resumed.";
            }
            else
            {
                content = "We are sad to say, a class you signed up for has been cancelled!\n" +
                          classToChange.Name + " that was supposed to happen on " + classToChange.Day +
                          " at " + classToChange.StartTime + ".";

                returnMessage = "This class has been cancelled. Remember to resume it when you can.";
            }

            bool changed = await classRepository.instructorCancelClass(classRequest.classId);


            if (changed && (oldWay == false))
            {
                await mailer.sendEmail("*****@*****.**", "Gym Moves", "Class Cancelled", content, emailReceiver);

                //Causes error

                /*foreach(ClassRegister user in classToChange.Registers) {
                 *
                 *  await mailer.sendEmail("*****@*****.**", "Gym Moves", "Class Cancelled", content, user.Student.Email);
                 * }*/

                return(Ok(returnMessage));
            }
            else if (changed && (oldWay == true))
            {
                return(Ok(returnMessage));
            }
            else
            {
                return(StatusCode(500, "We were unable to change the class on our side. Please try again later."));
            }
        }
 public ActionResult Edit([Bind(Include = "GymClassesID,Title,Introduction,Description,Benefits,GymOverviewID")] GymClasses gymClasses)
 {
     if (ModelState.IsValid)
     {
         db.Entry(gymClasses).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     return(View(gymClasses));
 }
Esempio n. 6
0
        public static GymClasses[] reducedClassToClassModel(GymClassResponse[] sources)
        {
            GymClasses[] targets = new GymClasses[sources.Length];

            for (int i = 0; i < sources.Length; i++)
            {
                targets[i] = reducedClassToClassModel(sources[i]);
            }

            return(targets);
        }
Esempio n. 7
0
 public async Task <GymClasses> editClass(GymClasses edit)
 {
     context.Update(edit);
     if (await context.SaveChangesAsync() > 0)
     {
         return(context.Classes.Where(p => p.ClassId == edit.ClassId).FirstOrDefault());
     }
     else
     {
         return(null);
     }
 }
Esempio n. 8
0
 public static void editRequestToGymClassModel(EditGymClassRequest source, GymClasses target)
 {
     target.ClassId            = source.ClassId;
     target.InstructorUsername = source.InstructorUsername;
     target.Name        = source.Name;
     target.Description = source.Description;
     target.Day         = source.Day;
     target.StartTime   = source.StartTime;
     target.EndTime     = source.EndTime;
     target.MaxCapacity = source.MaxCapacity;
     target.Cancelled   = source.Cancelled;
 }
Esempio n. 9
0
        public async Task <ActionResult <GymClassResponse> > getSpecificClass(int classid)
        {
            GymClasses targetClass = await classRepository.getClassById(classid);

            if (targetClass == null)
            {
                return(StatusCode(StatusCodes.Status404NotFound, "Specified class was not found!"));
            }

            GymClassResponse convertedObject = ClassMappers.classModelToReducedModel(targetClass);

            return(Ok(convertedObject));
        }
        public ActionResult Create([Bind(Include = "GymClassesID,Title,Introduction,Description,Benefits,GymOverviewID")] GymClasses gymClasses)
        {
            var currentGymClass = db.GymOverview.Find(gymClasses.GymOverviewID);


            if (ModelState.IsValid)
            {
                currentGymClass.GymClasses.Add(gymClasses);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(gymClasses));
        }
        // GET: GymClasses/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            GymClasses gymClasses = db.GymClasses.Find(id);

            if (gymClasses == null)
            {
                return(HttpNotFound());
            }
            return(View(gymClasses));
        }
Esempio n. 12
0
        public static EditGymClassRequest classToClassRequestModel(GymClasses source)
        {
            EditGymClassRequest target = new EditGymClassRequest();

            target.ClassId            = source.ClassId;
            target.InstructorUsername = source.InstructorUsername;
            target.Name        = source.Name;
            target.Description = source.Description;
            target.Day         = source.Day;
            target.StartTime   = source.StartTime;
            target.EndTime     = source.EndTime;
            target.MaxCapacity = source.MaxCapacity;
            target.Cancelled   = source.Cancelled;

            return(target);
        }
Esempio n. 13
0
        public async Task <bool> removeRegister(ClassRegister register)
        {
            context.Remove(register);

            IQueryable <GymClasses> query = context.Classes;

            query = query.Where(p => p.ClassId == register.ClassIdForeignKey);

            GymClasses classToUpdate = query.FirstOrDefault();

            classToUpdate.CurrentStudents--;

            context.Update(classToUpdate);

            return((await context.SaveChangesAsync()) > 0);
        }
Esempio n. 14
0
        public async Task <ActionResult <bool> > addClass(GymClassRequest newClass)
        {
            Users personAdding = await userRepository.getUser(newClass.Username);

            if (personAdding == null)
            {
                return(StatusCode(StatusCodes.Status404NotFound, "The user requesting for " +
                                  "the class to be added could not be found!"));
            }

            if (personAdding.UserType == UserTypes.Manager)
            {
                if (personAdding.GymIdForeignKey == newClass.NewClass.GymId)
                {
                    GymClasses newClassModel = ClassMappers.reducedClassToClassModel(newClass.NewClass);

                    if (await classRepository.getInstructorClassAtSpecificDateTime(newClassModel.InstructorUsername,
                                                                                   newClassModel.Day, newClassModel.StartTime) == null)
                    {
                        if (await classRepository.addClass(newClassModel))
                        {
                            return(Ok(true));
                        }
                        else
                        {
                            return(StatusCode(StatusCodes.Status500InternalServerError, "An error occurred attempting " +
                                              "to add the new class to the database!"));
                        }
                    }
                    else
                    {
                        return(StatusCode(StatusCodes.Status403Forbidden, "Designated instructor already has a class " +
                                          "starting at the given start time!"));
                    }
                }
                else
                {
                    return(StatusCode(StatusCodes.Status403Forbidden, "Managers can only add new classes for the gym " +
                                      "they're assigned to!"));
                }
            }
            else
            {
                return(StatusCode(StatusCodes.Status401Unauthorized, "Only managers can add new classes!"));
            }
        }
Esempio n. 15
0
        public async Task <GymClasses[]> getUserClasses(string username)
        {
            ClassRegister[] registerList = await registerRepository.getUserRegisters(username);

            if (registerList.Length == 0)
            {
                return(new GymClasses[0]);
            }

            GymClasses[] classList = new GymClasses[registerList.Length];

            for (int i = 0; i < registerList.Length; i++)
            {
                classList[i] = await getClassById(registerList[i].ClassIdForeignKey);
            }

            return(classList);
        }
Esempio n. 16
0
        public static GymClasses reducedClassToClassModel(GymClassResponse source)
        {
            GymClasses target = new GymClasses();

            target.ClassId            = source.ClassId;
            target.GymIdForeignKey    = source.GymId;
            target.InstructorUsername = source.Instructor;
            target.Name            = source.Name;
            target.Description     = source.Description;
            target.Day             = source.Day;
            target.StartTime       = source.StartTime;
            target.EndTime         = source.EndTime;
            target.MaxCapacity     = source.MaxCapacity;
            target.CurrentStudents = source.CurrentStudents;
            target.Cancelled       = source.Cancelled;

            return(target);
        }
Esempio n. 17
0
        public async Task <ActionResult <bool> > removeClass(GymClassRemoveRequest removeClass)
        {
            Users user = await userRepository.getUser(removeClass.Username);

            if (user == null)
            {
                return(StatusCode(StatusCodes.Status404NotFound, "The user requesting for the class to be removed could not be found!"));
            }

            if (user.UserType == UserTypes.Manager)
            {
                GymClasses targetClass = await classRepository.getClassById(removeClass.ClassId);

                if (targetClass == null)
                {
                    return(StatusCode(StatusCodes.Status404NotFound, "The class being removed was not found!"));
                }

                if (targetClass.GymIdForeignKey != user.GymIdForeignKey)
                {
                    return(StatusCode(StatusCodes.Status401Unauthorized, "Managers can only remove class for their own gym!"));
                }

                /* Multithread remove and notifying users */

                await classAttendanceRepository.removeClass(targetClass.ClassId);

                if (await classRepository.removeClass(targetClass) == true)
                {
                    return(Ok(true));
                }
                else
                {
                    return(StatusCode(StatusCodes.Status500InternalServerError, "Something went wrong removing the class from the database!"));
                }
            }

            return(StatusCode(StatusCodes.Status401Unauthorized, "Only managers can remove classes!"));
        }
Esempio n. 18
0
        public async Task <ActionResult <bool> > signUpUserToClass(RegisterUserForClassRequest register)
        {
            if (await classRepository.getClassById(register.ClassId) == null)
            {
                return(StatusCode(StatusCodes.Status404NotFound, "The class the user wants to signup for does not exist!"));
            }

            if (await userRepository.getUser(register.Username) == null)
            {
                return(StatusCode(StatusCodes.Status404NotFound, "The user does not exist!"));
            }

            ClassRegister existingRegister = await registerRepository.getSpecificUserAndClass(register.Username, register.ClassId);

            if (existingRegister == null)
            {
                GymClasses targetClass = await classRepository.getClassById(register.ClassId);

                if (targetClass.CurrentStudents < targetClass.MaxCapacity)
                {
                    if (await registerRepository.addRegister(RegisterMapper.registerUserForClassToClassRegister(register)))
                    {
                        return(Ok(true));
                    }
                    else
                    {
                        return(StatusCode(StatusCodes.Status500InternalServerError, "An error occurred while trying to register the user for the class!"));
                    }
                }
                else
                {
                    return(StatusCode(StatusCodes.Status400BadRequest, "Class max capacity reached!"));
                }
            }
            else
            {
                return(StatusCode(StatusCodes.Status400BadRequest, "User is already signed up for the specified class"));
            }
        }
Esempio n. 19
0
 public async Task <bool> managerDeleteClass(GymClasses classToDelete)
 {
     context.Remove(classToDelete);
     return((await context.SaveChangesAsync()) > 0);
 }
Esempio n. 20
0
        public async Task <ActionResult <bool> > deregisterUserFromClass(RegisterUserForClassRequest register)
        {
            if (await classRepository.getClassById(register.ClassId) == null)
            {
                return(StatusCode(StatusCodes.Status404NotFound, "The class the user wants to signup for does not exist!"));
            }

            if (await userRepository.getUser(register.Username) == null)
            {
                return(StatusCode(StatusCodes.Status404NotFound, "The user does not exist!"));
            }

            ClassRegister existingRegister = await registerRepository.getSpecificUserAndClass(register.Username, register.ClassId);

            if (existingRegister == null)
            {
                return(StatusCode(StatusCodes.Status404NotFound, "User is not signed up for the class!"));
            }

            if (await registerRepository.removeRegister(existingRegister))
            {
                DayOfWeek  today = DateTime.Today.DayOfWeek;
                DateTime   date;
                GymClasses targetClass = await classRepository.getClassById(register.ClassId);

                if (today.ToString().ToLower() == targetClass.Day.ToLower())
                {
                    date = DateTime.Today.Date;
                }
                else
                {
                    DayOfWeek dayOfClass;

                    switch (targetClass.Day.ToLower())
                    {
                    case "monday":
                        dayOfClass = DayOfWeek.Monday;
                        break;

                    case "tuesday":
                        dayOfClass = DayOfWeek.Tuesday;
                        break;

                    case "wednesday":
                        dayOfClass = DayOfWeek.Wednesday;
                        break;

                    case "thursday":
                        dayOfClass = DayOfWeek.Thursday;
                        break;

                    case "friday":
                        dayOfClass = DayOfWeek.Friday;
                        break;

                    case "saturday":
                        dayOfClass = DayOfWeek.Saturday;
                        break;

                    default:
                        dayOfClass = DayOfWeek.Sunday;
                        break;
                    }

                    int difference = days[(int)today, (int)dayOfClass];

                    date = DateTime.Today.AddDays(difference).Date;
                }

                ClassAttendance classToChange = await classAttendanceRepository.getClassInstance(register.ClassId, date);

                if (classToChange == null)
                {
                    ClassAttendance newClass = new ClassAttendance();
                    newClass.Date             = date;
                    newClass.ClassId          = targetClass.ClassId;
                    newClass.Capacity         = targetClass.MaxCapacity;
                    newClass.Class            = targetClass;
                    newClass.NumberOfStudents = targetClass.CurrentStudents;

                    await classAttendanceRepository.addNewClassInstance(newClass);
                }
                else
                {
                    await classAttendanceRepository.editClassAttendance(classToChange.ClassId, classToChange.Date, -1);
                }


                return(Ok(true));
            }
            else
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, "An error occurred while attempting to remove the register from the database!"));
            }
        }
Esempio n. 21
0
 public async Task <bool> addClass(GymClasses gymClass)
 {
     context.Add(gymClass);
     return((await context.SaveChangesAsync()) > 0);
 }
Esempio n. 22
0
        public async Task <ActionResult <ClassRatingResponse> > rateClass(ClassRatingRequest request)
        {
            /* Validate User Exists */
            Users user = await userRepository.getUser(request.username);

            if (user == null)
            {
                return(StatusCode(StatusCodes.Status401Unauthorized, "User specified is not a valid user!"));
            }

            /* Validate Class Exists */
            GymClasses gymClass = await classRepository.getClassById(request.classId);

            if (gymClass == null)
            {
                return(StatusCode(StatusCodes.Status404NotFound, "Specified class does not exist!"));
            }

            /* Validate From Same Gym */
            if (gymClass.GymIdForeignKey != user.GymIdForeignKey)
            {
                return(StatusCode(StatusCodes.Status401Unauthorized, "User rating the class is not from the same gym as the class!"));
            }

            /* Validate Not Instructor Of Class */
            if (gymClass.InstructorUsername == user.Username)
            {
                return(StatusCode(StatusCodes.Status401Unauthorized, "Instructors cannot rate their own classes!"));
            }

            /* Validate Rating Out Of 5 */
            if (request.rating > 5 || request.rating < 0)
            {
                return(StatusCode(StatusCodes.Status400BadRequest, "Rating provided is out of allowed range!"));
            }

            /* Check if existing rating record exists */
            ClassRating rating = await classRatingRepository.getRating(request.classId);

            if (rating == null)
            {
                rating = new ClassRating();

                rating.ClassIdForeignKey = request.classId;
                rating.RatingCount       = 0;
                rating.RatingCount       = 0;

                if (!(await classRatingRepository.addRating(rating)))
                {
                    return(StatusCode(StatusCodes.Status500InternalServerError, "Something went wrong creating the rating record for the class!"));
                }
            }

            rating.RatingCount++;
            rating.RatingSum += request.rating;

            if (!(await classRatingRepository.rateClass(rating)))
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, "Something went wrong adding your rating to the database!"));
            }

            ClassRatingResponse response = new ClassRatingResponse();

            response.classId     = rating.ClassIdForeignKey;
            response.ratingCount = rating.RatingCount;
            response.ratingSum   = rating.RatingSum;

            return(Ok(response));
        }
Esempio n. 23
0
 public async Task <bool> removeClass(GymClasses gymClass)
 {
     context.Remove(gymClass);
     return((await context.SaveChangesAsync()) > 0);
 }