/// <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)); } } ) ) ); }
/// <summary> /// takes in calibration information for a certain exercise and returns the calculated 1rm /// for that exercise /// </summary> /// <param name="root"></param> /// <param name="db"></param> /// <param name="manager"></param> static void SetupExerciseCalibrationManager(mpBase root, Database db, UserManager manager) { root.addProperty("exercise-calibration", new mpRestfulTarget( new Func <System.Net.HttpListenerRequest, mpResponse>( req => { return(mpResponse.empty400()); } ), new Func <System.Net.HttpListenerRequest, mpResponse>( req => { Console.Write("Received Exercise Calibration Info..."); string requestData = req.data(); string requestEmail = "", requestPasswordEmailHash = ""; double oneRepMax = -1; try { mpObject requestJSON = (mpObject)mpJson.parse(requestData); requestEmail = ((mpValue)requestJSON.getChild("email")).data.asString(); requestPasswordEmailHash = ((mpValue)requestJSON.getChild("passwordEmailHash")).data.asString(); string exName = ((mpValue)requestJSON.getChild("exercise")).data.asString(); UserDataAccess info = new UserDataAccess(db, manager.getUser(requestEmail, requestPasswordEmailHash)); info.IngestCalibrationInfo( exName, ((mpValue)requestJSON.getChild("reps")).data.asInt(), ((mpValue)requestJSON.getChild("weight")).data.asInt() ); info.Store(); oneRepMax = info.GetMostRecentCalibratedOneRepMax(exName).Value; } catch (Exception ex) { Console.WriteLine("Calibration Info Error: " + ex.Message); return(new mpResponse(new binaryData("{\"good\":false, \"message\":\"" + ex.Message + "\"}"), 400)); } return(new mpResponse(new binaryData("{\"good\":true, \"oneRepMax\":" + oneRepMax + "}"), 200)); } ) ) ); }
/// <summary> /// takes in feedback for a workout item and passes it to the user's plan for processing /// </summary> /// <param name="root"></param> /// <param name="db"></param> /// <param name="manager"></param> static void SetupExerciseFeedbackManager(mpBase root, Database db, UserManager manager) { root.addProperty("exercise-feedback", new mpRestfulTarget( new Func <System.Net.HttpListenerRequest, mpResponse>( req => { return(mpResponse.empty400()); } ), new Func <System.Net.HttpListenerRequest, mpResponse>( req => { Console.Write("Exercise Feedback Data Requested..."); string requestData = req.data(); string requestEmail = "", requestPasswordEmailHash = ""; try { mpObject requestJSON = (mpObject)mpJson.parse(requestData); requestEmail = ((mpValue)requestJSON.getChild("email")).data.asString(); requestPasswordEmailHash = ((mpValue)requestJSON.getChild("passwordEmailHash")).data.asString(); mpObject feedback = (mpObject)requestJSON.getChild("feedback"); WorkoutItem item = new WorkoutItem(feedback); UserDataAccess access = new UserDataAccess(db, manager.getUser(requestEmail, requestPasswordEmailHash)); access.UpdateItem(item); access.Store(); access.Dispose(); } catch (Exception ex) { Console.WriteLine("Exercise Request Error: " + ex.Message); return(new mpResponse(new binaryData("{\"good\":false, \"message\":\"" + ex.Message + "\"}"), 400)); } return(new mpResponse(new binaryData("{\"good\":true}"), 200)); } ) ) ); }
/// <summary> /// manages user creating accounts /// </summary> static void SetupRegistrationManager(mpBase root, Database db, UserManager manager) { root.addProperty("register", new mpRestfulTarget( new Func <System.Net.HttpListenerRequest, mpResponse>( req => { return(mpResponse.empty400()); } ), new Func <System.Net.HttpListenerRequest, mpResponse>( req => { Console.WriteLine("Accout Create Request..."); string requestData = req.data(); string requestEmail = "", requestPasswordEmailHash = ""; try { mpObject requestJSON = (mpObject)mpJson.parse(requestData); requestEmail = ((mpValue)requestJSON.getChild("email")).data.asString(); requestPasswordEmailHash = ((mpValue)requestJSON.getChild("passwordEmailHash")).data.asString(); } catch (Exception ex) { Console.WriteLine("Account Creation Error:" + ex.Message); return(new mpResponse(new binaryData("{\"good\":false, \"message\":\"" + ex.Message + "\"}"), 400)); } try { manager.createUser(requestEmail, requestPasswordEmailHash); } catch (Exception ex) { Console.WriteLine("Account Creation Error:" + ex.Message); return(new mpResponse(new binaryData("{\"good\":false, \"message\":\"" + ex.Message + "\"}"), 400)); } Console.WriteLine("Account Created Correctly"); return(new mpResponse(new binaryData("{\"good\":true, \"message\":\"Account Created\"}"), 200)); } ) ) ); }
static void Main(string[] args) { string host = "localhost"; if (args.Length >= 1) { host = args[0]; } string connection = "Server=" + host + ";Port=5432;Username=postgres;Password=postpass;Database=postgres"; Database db = new Database(connection); ResetDatabase(db); Exercise.getAllExercises(db); UserManager manager = new UserManager(db); var us = manager.getUser("*****@*****.**", Util.hash("bob" + "*****@*****.**")); ProgressStatistics st = new ProgressStatistics(); for (int i = 0; i < 200; i++) { st.AddDataPoint(DateTime.Now + TimeSpan.FromMinutes(i), (i / 200.0) * Math.Sin(i * 0.1)); } st.Finish(); var fout = new FileStream("output.pdf", FileMode.Create); st.MakePdf("One-Rep-Max over time", fout); //using (UserDataAccess ac = new UserDataAccess(db, us)) { // for(int d = 0; d < 50; ++d) { // WorkoutSession session = new WorkoutSession(); // session.workoutItems = new List<WorkoutItem>(); // session.uuid = Guid.NewGuid().ToString(); // session.date = DateTime.Now + TimeSpan.FromDays(d - 25); // session.primaryGroup = ((BodyPart)(1 + Util.rand(6))).ToString(); // session.secondaryGroup = "this does not matter"; // for (int i = 0; i < 6; i++) { // WorkoutItem item = new WorkoutItem(); // item.ex = Exercise.globalExercises.randomElement(); // item.oneRepMax = Util.rand(0.0, 50.0); // item.sets = new List<WorkoutSet>(); // item.uuid = Guid.NewGuid().ToString(); // item.difficulty = 2; // for(int j = 0; j < (3 + Util.rand(3)); j++) { // WorkoutSet set = new WorkoutSet(); // set.percent1RM = 75; // set.uuid = Guid.NewGuid().ToString(); // set.reps = 10; // set.repsCompleted = 10; // set.doneWithRest = true; // set.restTime = TimeSpan.FromSeconds(4); // item.sets.Add(set); // } // session.workoutItems.Add(item); // } // ac.AddDay(session); // } // ac.Store(); // WorkoutGenerator gen = new WorkoutGenerator(ac); // Console.WriteLine(gen.ToString()); //} //User bob = manager.createUser("bob", "bobtest"); //UserDataAccess bobaccess = new UserDataAccess(db, bob); //WorkoutGenerator bobs = new WorkoutGenerator(bobaccess); //WorkoutSession sesh = new WorkoutSession(); //sesh.date = DateTime.Now - TimeSpan.FromDays(1.0); ////sesh.primaryGroup = "Chest"; ////sesh.secondaryGroup = "Back"; //sesh.uuid = Guid.NewGuid().ToString(); //sesh.workoutItems = new List<WorkoutItem>(); //for(int i = 0; i < 3; ++i) { // WorkoutItem item = new WorkoutItem(); // item.difficulty = 2; // item.ex = Exercise.globalExercises[3]; //} //bobaccess.AddDay(new WorkoutSession()) mpBase root = new mpBase(); mpServer server = new mpServer(); server.start(root.restful, "http://*:8080/"); SetupRegistrationManager(root, db, manager); SetupLoginManager(root, db, manager); SetupExerciseInfoManager(root, db, manager); SetupExerciseCalibrationManager(root, db, manager); SetupExerciseFeedbackManager(root, db, manager); Console.ReadKey(); server.stop(); }