summaryrefslogtreecommitdiff
path: root/app/routes
diff options
context:
space:
mode:
authorFivePixels <o5pxels@gmail.com>2022-04-23 15:58:33 -0500
committerFivePixels <o5pxels@gmail.com>2022-04-23 15:58:33 -0500
commitb45e96d88485f7c9a7b6281b781218e180a43e94 (patch)
treef942eec8ed16ee48008c81d519639b9f761f5d34 /app/routes
parent628e47b4b8243fa7e84703f3f71c3de19c5baa65 (diff)
parent4f1e55112138a1f3b4be3bf23e3740ae3effac35 (diff)
downloadStrengthy-b45e96d88485f7c9a7b6281b781218e180a43e94.tar.xz
Strengthy-b45e96d88485f7c9a7b6281b781218e180a43e94.zip
Merge branch 'master' of stilbruch.xyz:strengthy
Diffstat (limited to 'app/routes')
-rw-r--r--app/routes/__init__.py4
-rw-r--r--app/routes/api.py17
-rw-r--r--app/routes/basic.py12
-rw-r--r--app/routes/user.py53
-rw-r--r--app/routes/workout.py77
5 files changed, 163 insertions, 0 deletions
diff --git a/app/routes/__init__.py b/app/routes/__init__.py
new file mode 100644
index 0000000..09fcbf3
--- /dev/null
+++ b/app/routes/__init__.py
@@ -0,0 +1,4 @@
+from routes.api import *
+from routes.user import *
+from routes.workout import *
+from routes.basic import *
diff --git a/app/routes/api.py b/app/routes/api.py
new file mode 100644
index 0000000..58b4732
--- /dev/null
+++ b/app/routes/api.py
@@ -0,0 +1,17 @@
+from app import app, db
+from flask import redirect, request
+from flask_login import current_user, login_required
+from tables import Workout
+
+@app.route("/api/workout/delete", methods=['GET'])
+@login_required
+def api_workout_delete():
+ if 'id' not in request.args:
+ return redirect('/home');
+
+ workout = Workout.query.filter_by(id=int(request.args['id']), user_id=current_user.id).first()
+ if workout:
+ db.session.delete(workout)
+ db.session.commit()
+
+ return redirect('/home')
diff --git a/app/routes/basic.py b/app/routes/basic.py
new file mode 100644
index 0000000..5883b97
--- /dev/null
+++ b/app/routes/basic.py
@@ -0,0 +1,12 @@
+from app import app, db
+from flask import render_template
+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..d218738
--- /dev/null
+++ b/app/routes/user.py
@@ -0,0 +1,53 @@
+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'])
+@login_required
+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..8615156
--- /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, form=None)
+
+@app.route("/workout/select", methods=['GET'])
+@login_required
+def selectWorkout():
+ return render_template('workout/select.html')