/// <summary> /// manages creating exercises and responding to the user with information about that request /// including all the exercises that were created during the request /// </summary> /// <param name="root"></param> /// <param name="db"></param> /// <param name="manager"></param> static void SetupExerciseInfoManager(mpBase root, Database db, UserManager manager) { root.addProperty("exercise-info", new mpRestfulTarget( new Func <System.Net.HttpListenerRequest, mpResponse>( req => { return(mpResponse.empty400()); } ), new Func <System.Net.HttpListenerRequest, mpResponse>( req => { Console.Write("Exercise Data Requested..."); string requestData = req.data(); string requestEmail = "", requestPasswordEmailHash = ""; int requestNumItems = -1; try { mpObject requestJSON = (mpObject)mpJson.parse(requestData); requestEmail = ((mpValue)requestJSON.getChild("email")).data.asString(); requestPasswordEmailHash = ((mpValue)requestJSON.getChild("passwordEmailHash")).data.asString(); requestNumItems = ((mpValue)requestJSON.getChild("numItems")).data.asInt(); } catch (Exception ex) { Console.WriteLine("Exercise Request Error: " + ex.Message); return(new mpResponse(new binaryData("{\"good\":false, \"message\":\"" + ex.Message + "\"}"), 400)); } try { User user = manager.getUser(requestEmail, requestPasswordEmailHash); UserDataAccess info = new UserDataAccess(db, user); WorkoutGenerator p = new WorkoutGenerator(info); mpResponse res = mpResponse.success(); WorkoutSession sesh = p.GenSesh(requestNumItems); res.response = new binaryData(sesh.toJSON(info).ToString()); info.AddDay(sesh); info.Store(); info.Dispose(); Console.WriteLine(res.response.asString()); Console.WriteLine("Responded! (user = "******")"); return(res); } catch (Exception ex) { Console.WriteLine("Exercise Request Error: " + ex.Message); return(new mpResponse(new binaryData("{\"good\":false, \"message\":\"" + ex.Message + "\"}"), 400)); } } ) ) ); }
public WorkoutSession GenSesh(int workoutSlots, HashSet <BodyPart> rejected = null) { WorkoutSession workout = new WorkoutSession(); workout.bodyparts = CalculateBodyParts(rejected, workoutSlots); List <KeyValuePair <BodyPart, Tuple <int, int, int> > > bodyPartSubgroups = new List <KeyValuePair <BodyPart, Tuple <int, int, int> > >(); int[] distribution = new int[workout.bodyparts.Count()]; for (int i = 0; i < workoutSlots; i++) { distribution[i % distribution.Length]++; } for (int i = 0; i < workout.bodyparts.Count(); i++) { BodyPart part = workout.bodyparts[i]; bodyPartSubgroups.Add(new KeyValuePair <BodyPart, Tuple <volume, volume, volume> >(part, CalculateSubgroups(part, distribution[i]))); } //selects the exercises for the workout List <KeyValuePair <BodyPart, List <Exercise> > > exercises = new List <KeyValuePair <BodyPart, List <Exercise> > >(); bodyPartSubgroups.ForEach(group => { exercises.Add(new KeyValuePair <BodyPart, List <Exercise> >(group.Key, CalculateExercises(group.Key, group.Value, history))); }); List <WorkoutItem> items = new List <WorkoutItem>(); items = OrderExercises(exercises); items = CalculateSets(items); items = CalculateReps(items); //depends on workout style??? items = CalculateIntensity(items, workout.bodyparts); //depends on number of reps and location in the workout items = CalculateRestime(items); workout.workoutItems = items; return(workout); }
public void AddDay(WorkoutSession day) { newDays.Add(day); }