// 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)); }
// 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")); } }
// 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)); }
// 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)); }
// 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")); } }