Exemplo n.º 1
0
        // Deletes a user in the Users Collection based on Membership ID

        // Body Fields: membershipID
        // Response: Deleted confirmation

        // DELETE api/<controller>
        public HttpResponseMessage Delete([FromBody] User user)
        {
            // input must have a Membership ID
            if (string.IsNullOrEmpty(user?.membershipID))
            {
                return(Request.CreateResponse(HttpStatusCode.BadRequest));
            }

            var deleteFilter = Builders <User> .Filter.Eq("membershipID", user.membershipID);

            if (deleteFilter != null)
            {
                // Find the user in the database
                // Loop though all of their trainings
                // go to the training and loop though the sign up list

                // Refacto this into meathod
                // Delete out of the sign up List
                // Update everyone's priority

                MongoConnections.getMongoUsersCollection().DeleteOne(deleteFilter);
                return(Request.CreateResponse(HttpStatusCode.OK, user.membershipID + " has been deleted from the database."));
            }

            return(Request.CreateResponse(HttpStatusCode.NotFound));
        }
Exemplo n.º 2
0
        // Put a user into the signup list

        // Body Fields: trainingID, membershipID
        // Response: Success or Not Success.
        // Change: Training signupList is added with a TrainingUserItem(membershipID, placeInQueue, timeSignedUp)
        //         User trainingCamps is added with the trainingID

        // Note: User must not have the trainingID in trainingCamps

        // PUT api/<controller>/5
        public HttpResponseMessage Put([FromBody] Register register)
        {
            // Add the user to the registered list in training

            // Find the training by trainingID. (setup)
            var getFilterTraining = Builders <Training> .Filter.Eq("trainingID", register.trainingID);

            // Find the user by membership ID. (setup)
            var getFilterUser = Builders <User> .Filter.Eq("membershipID", register.membershipID);

            if (getFilterTraining != null && getFilterUser != null)
            {
                // Get the training, by the filter
                Training trainingFound = MongoConnections.getMongoTrainingCollection().Find(getFilterTraining).FirstOrDefault();
                // Get the user, by the filter
                User userFound = MongoConnections.getMongoUsersCollection().Find(getFilterUser).FirstOrDefault();

                //This is used for updating currentTrainingUserCount in Training and placeInQueue in TrainingUserItem
                int nextCount = (trainingFound.currentTrainingUserCount + 1);

                // if the User already has the trainingID in trainingCamps, DO NOT ADD
                if (userFound.trainingCamps.Contains(register.trainingID))
                {
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, "User is already signed up for this training"));
                }
                else
                {
                    // Update signupList in the Training object with a new TrainingUserItem with membership ID, Place in the Queue, time signed up, incomplete status
                    var updateUsersListTraining = Builders <Training> .Update.Push("signupList", new TrainingUserItem { membershipID = register.membershipID, placeInQueue = nextCount, timeSignedUp = DateTime.Now.ToString(), status = Constants.TRAINING_STATUS_PENDING_REGISTRATION });

                    MongoConnections.getMongoTrainingCollection().UpdateOne(getFilterTraining, updateUsersListTraining);

                    // Update CurrentTrainingUserCount with the number is users
                    var updateCurrentTrainingUserCountTraining = Builders <Training> .Update.Set("currentTrainingUserCount", nextCount.ToString());

                    MongoConnections.getMongoTrainingCollection().UpdateOne(getFilterTraining, updateCurrentTrainingUserCountTraining);

                    // Update TrainingCamps of a user with the training ID
                    var updateUser = Builders <User> .Update.Push("trainingCamps", register.trainingID);

                    MongoConnections.getMongoUsersCollection().UpdateOne(getFilterUser, updateUser);

                    return(Request.CreateResponse(HttpStatusCode.OK, "User has been put on the signup list Priority: " + nextCount));
                }
            }
            else
            {
                return(Request.CreateResponse(HttpStatusCode.BadRequest, "Something is incorrect with the request"));
            }
        }
Exemplo n.º 3
0
        // 2 Functionalities
        // Gets a user from the Users Collection based on MembershipID

        // Body Fields: membershipID
        // Response: Whole User Document

        // GET api/<controller>
        public HttpResponseMessage Get([FromBody] User user)
        {
            // user must have a Membership ID, if not return everything
            if (string.IsNullOrEmpty(user?.membershipID))
            {
                List <User> allUsers = MongoConnections.getMongoUsersCollection().Find(new BsonDocument()).ToList();

                return(Request.CreateResponse(HttpStatusCode.OK, allUsers));
            }

            var getFilter = Builders <User> .Filter.Eq("membershipID", user.membershipID);

            if (getFilter != null)
            {
                return(Request.CreateResponse(HttpStatusCode.OK, MongoConnections.getMongoUsersCollection().Find(getFilter).FirstOrDefault()));
            }

            return(Request.CreateResponse(HttpStatusCode.NotFound));
        }
Exemplo n.º 4
0
        // Adds a user to the Users Collection

        // Body Fields: membershipID, name, rank, chapter, leaugeOfChapters
        // Response: Whole User Document (Will populate _id and a blank trainingCamps with that)

        // Notes: Check first if the user already exists in the database with the same membershipID. If there is DO NOT ADD

        // PUT api/<controller>
        public HttpResponseMessage Post([FromBody] User user)
        {
            // Input must have a Membership ID
            if (string.IsNullOrEmpty(user?.membershipID))
            {
                return(Request.CreateResponse(HttpStatusCode.BadRequest));
            }

            // Check if user exists already
            var getFilter = Builders <User> .Filter.Eq("membershipID", user.membershipID);

            if (MongoConnections.getMongoUsersCollection().Find(getFilter).FirstOrDefault() != null)
            {
                return(Request.CreateResponse(HttpStatusCode.BadRequest, "A user already exists with MemberID: " + user.membershipID));
            }

            // User with membershipID passed in is not in the database, add it!

            //Create a new empty List
            user.trainingCamps = new List <string>();
            MongoConnections.getMongoUsersCollection().InsertOne(user);

            return(Request.CreateResponse(HttpStatusCode.Created, user));
        }
Exemplo n.º 5
0
        // 2 Functionalities

        // ***Funtionality 1. Send the User to the back of the signup List
        // Remove a User based off of membershipID from the signupList in Training based off of trainingID
        // Update All TrainingUserItems to account for the removed user
        // ReAdd the user to the end of the signup List

        // Body Fields: trainingID, membershipID, SendToTheBack(boolean) True
        // Response: Success or Not Success.

        // ***Funtionality 2. Fully delete the TrainingUserItem from the signupList from the training based off of trainingID
        // Fully delete the trainingID found in trainingCamps from User based off of membershipID

        // Body Fields: trainingID, membershipID, SendToTheBack(boolean) False
        // Response: Success or Not Success.

        // DELETE api/<controller>/5
        public HttpResponseMessage Delete([FromBody] Unregister unregister)
        {
            // Find the training by trainingID. (setup)
            var getFilterTraining = Builders <Training> .Filter.Eq("trainingID", unregister.trainingID);

            // Find the user by membership ID. (setup)
            var getFilterUser = Builders <User> .Filter.Eq("membershipID", unregister.membershipID);

            if (getFilterTraining != null && getFilterUser != null)
            {
                // Get the training, by the filter
                Training trainingFound = MongoConnections.getMongoTrainingCollection().Find(getFilterTraining).FirstOrDefault();
                // Get the user, by the filter
                User userFound = MongoConnections.getMongoUsersCollection().Find(getFilterUser).FirstOrDefault();

                // if the User already has the trainingID in trainingCamps
                if (userFound.trainingCamps.Contains(unregister.trainingID))
                {
                    if (unregister.sendToTheBack)
                    {
                        // Get the full list of TrainingUserItems
                        List <TrainingUserItem> signupListFromTraining = trainingFound.signupList;

                        int counter        = 0;
                        int oldPlaceOnList = 0;

                        // Grab only the one we want to update
                        foreach (TrainingUserItem trainingUserItem in signupListFromTraining)
                        {
                            if (trainingUserItem.membershipID == unregister.membershipID)
                            {
                                //memberfound! Update it!
                                oldPlaceOnList = signupListFromTraining[counter].placeInQueue;
                                signupListFromTraining[counter].placeInQueue = trainingFound.currentTrainingUserCount + 1;
                                break;
                            }

                            counter++;
                        }

                        counter = 0;
                        //update the others based off the user added to the back of the signup list
                        foreach (TrainingUserItem trainingUserItem in signupListFromTraining)
                        {
                            if (trainingUserItem.placeInQueue > oldPlaceOnList)
                            {
                                signupListFromTraining[counter].placeInQueue--;
                            }

                            counter++;
                        }

                        var updateCurrentTrainingUserCountTraining = Builders <Training> .Update.Set("signupList", signupListFromTraining);

                        MongoConnections.getMongoTrainingCollection().UpdateOne(getFilterTraining, updateCurrentTrainingUserCountTraining);

                        return(Request.CreateResponse(HttpStatusCode.OK, "User has been sent to the back with new priority: " + trainingFound.currentTrainingUserCount));
                    }
                    else
                    {
                        // Get the full list of TrainingUserItems
                        List <TrainingUserItem> signupListFromTraining = trainingFound.signupList;

                        int counter        = 0;
                        int oldPlaceOnList = 0;

                        // Grab only the one we want to update
                        foreach (TrainingUserItem trainingUserItem in signupListFromTraining)
                        {
                            if (trainingUserItem.membershipID == unregister.membershipID)
                            {
                                //memberfound! Delete it!
                                oldPlaceOnList = trainingUserItem.placeInQueue;
                                signupListFromTraining.RemoveAt(counter);
                                break;
                            }

                            counter++;
                        }

                        counter = 0;
                        //update the others based off the user added to the back of the signup list
                        foreach (TrainingUserItem trainingUserItem in signupListFromTraining)
                        {
                            if (trainingUserItem.placeInQueue > oldPlaceOnList)
                            {
                                signupListFromTraining[counter].placeInQueue--;
                            }

                            counter++;
                        }

                        var updateSignUpListTraining = Builders <Training> .Update.Set("signupList", signupListFromTraining);

                        MongoConnections.getMongoTrainingCollection().UpdateOne(getFilterTraining, updateSignUpListTraining);

                        //deincrementSizeOfTraining
                        var updateCurrentTrainingUserCountTraining = Builders <Training> .Update.Set("currentTrainingUserCount", trainingFound.currentTrainingUserCount - 1);

                        MongoConnections.getMongoTrainingCollection().UpdateOne(getFilterTraining, updateCurrentTrainingUserCountTraining);

                        counter = 0;
                        //remove the training out of the User's training list
                        foreach (String training in userFound.trainingCamps)
                        {
                            userFound.trainingCamps.RemoveAt(counter);
                            counter++;

                            break;
                        }

                        var updateUserTrainingCamps = Builders <User> .Update.Set("trainingCamps", userFound.trainingCamps);

                        MongoConnections.getMongoUsersCollection().UpdateOne(getFilterUser, updateUserTrainingCamps);

                        //Functionality 2 full remove
                        return(Request.CreateResponse(HttpStatusCode.OK, "User has been unregistered"));
                    }
                }
                else
                {
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, "User is not even signed up to this training"));
                }
            }
            else
            {
                return(Request.CreateResponse(HttpStatusCode.BadRequest, "Something is incorrect with the request"));
            }
        }