summaryrefslogtreecommitdiff
path: root/app/routes
diff options
context:
space:
mode:
Diffstat (limited to 'app/routes')
-rw-r--r--app/routes/__init__.py3
-rw-r--r--app/routes/basic.py11
-rw-r--r--app/routes/user.py52
-rw-r--r--app/routes/workout.py77
4 files changed, 143 insertions, 0 deletions
diff --git a/app/routes/__init__.py b/app/routes/__init__.py
new file mode 100644
index 0000000..e243576
--- /dev/null
+++ b/app/routes/__init__.py
@@ -0,0 +1,3 @@
+from routes.user import *
+from routes.workout import *
+from routes.basic import *
diff --git a/app/routes/basic.py b/app/routes/basic.py
new file mode 100644
index 0000000..36f42f5
--- /dev/null
+++ b/app/routes/basic.py
@@ -0,0 +1,11 @@
+from app import app, db
+from flask_login import login_required
+
+@app.route("/", methods=["GET"])
+def index():
+ return render_template('index.html')
+
+@app.route("/home", methods=["GET"])
+@login_required
+def home():
+ return render_template('home.html')
diff --git a/app/routes/user.py b/app/routes/user.py
new file mode 100644
index 0000000..4568d97
--- /dev/null
+++ b/app/routes/user.py
@@ -0,0 +1,52 @@
+from app import app, db
+from flask import render_template, redirect, request, url_for, flash
+from flask_login import current_user, login_user, login_required, logout_user
+from forms import LoginForm, RegisterForm
+from tables import User
+
+@app.route("/login", methods=['GET', 'POST'])
+def login():
+ form = LoginForm()
+ username = form.username.data
+ password = form.password.data
+
+ if form.validate_on_submit():
+ # Valid submission
+ user = User.query.filter_by(username=username).first()
+
+ # TODO: show user if login succeeded
+ if user and user.verify_password(password):
+ login_user(user)
+ return redirect(url_for('home'))
+ else:
+ flash("Invalid username or password", "danger")
+
+ return render_template('user/login.html', form=form)
+
+@app.route("/logout", methods=['GET', 'POST'])
+def logout():
+ logout_user()
+ return redirect('/')
+
+@app.route("/register", methods=['GET', 'POST'])
+def register():
+ form = RegisterForm()
+ # Load data from form
+ username = form.username.data
+ password = form.password.data
+ email = form.email.data
+
+ if form.validate_on_submit():
+ # Valid submission
+ user = User.query.filter_by(username=username).first()
+ if not user:
+ # No user with this username
+ user = User(username, password, email)
+ db.session.add(user)
+ db.session.commit()
+ return redirect(url_for('login'))
+ else:
+ flash("User already exists", "danger")
+
+ return render_template('user/register.html', form=form)
+
diff --git a/app/routes/workout.py b/app/routes/workout.py
new file mode 100644
index 0000000..db8ab48
--- /dev/null
+++ b/app/routes/workout.py
@@ -0,0 +1,77 @@
+from app import app, db
+from flask import render_template, redirect, request, url_for, flash
+from flask_login import current_user, login_required
+from forms import LoginForm, RegisterForm, WorkoutCreateForm
+from tables import User, Workout
+
+@app.route("/workout/create", methods=['GET', 'POST'])
+@login_required
+def createWorkout():
+ form = WorkoutCreateForm()
+ name = form.name.data
+
+ if form.validate_on_submit():
+ # Make sure the user doesn't already have a workout with this name
+ workout = Workout.query.filter_by(user_id=current_user.id, name=name).first()
+ if not workout:
+ # TODO: add exercises
+ workout = Workout(current_user, name, [e.data for e in form.exercises.entries])
+ db.session.add(workout)
+ db.session.commit()
+
+ return redirect(url_for('home'));
+ else:
+ flash("Workout with this name already exists", "danger")
+
+ return render_template('workout/create.html', form=form, title="Create a Workout")
+
+@app.route("/workout/edit", methods=['GET', 'POST'])
+@login_required
+def editWorkout():
+ # Id is required
+ if 'id' not in request.args:
+ return redirect(url_for('home'))
+
+ # Validate Id
+ workout = Workout.query.filter_by(id=int(request.args['id']), user_id=current_user.id).first()
+ if not workout:
+ return redirect(url_for('home'))
+
+ form = WorkoutCreateForm()
+
+ if form.validate_on_submit():
+ # Form has been submitted, write changes
+
+ workout.name = form.name.data
+ # TODO: Add exercise changes
+
+ # Write changes to database
+ db.session.commit()
+ return redirect(url_for('home'));
+ else:
+ form.name.data = workout.name
+ form.exercises.pop_entry() # TODO: better way to do this?
+
+ for exercise in workout.exercises:
+ form.exercises.append_entry(exercise)
+
+ return render_template('workout/create.html', form=form, title=f'Edit Workout "{workout.name}"')
+
+@app.route("/workout/record", methods=['GET'])
+@login_required
+def recordWorkout():
+ # Id is required
+ if 'id' not in request.args:
+ return redirect(url_for('home'))
+
+ # Matching workout required
+ workout = Workout.query.filter_by(id=int(request.args['id']), user_id=current_user.id).first()
+ if not workout:
+ return redirect(url_for('home'));
+
+ return render_template('workout/record.html', workout=workout)
+
+@app.route("/workout/select", methods=['GET'])
+@login_required
+def selectWorkout():
+ return render_template('workout/select.html')