Create blueprint for exercises
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
from flask import Blueprint, render_template, redirect, url_for, flash, request
|
||||
from werkzeug.security import generate_password_hash, check_password_hash
|
||||
from flask_login import login_user, login_required, logout_user
|
||||
from flask_login import login_user, login_required, logout_user, current_user
|
||||
from forms.login import LoginForm
|
||||
from forms.signup import SignupForm
|
||||
from extensions import db
|
||||
|
||||
103
routes/exercises.py
Normal file
103
routes/exercises.py
Normal file
@@ -0,0 +1,103 @@
|
||||
from flask import Blueprint, render_template, request, url_for
|
||||
from flask_login import login_required, current_user
|
||||
from extensions import db
|
||||
from decorators import admin_required
|
||||
|
||||
exercises_bp = Blueprint('exercises', __name__)
|
||||
|
||||
@exercises_bp.route("/exercise", methods=['POST'])
|
||||
@login_required
|
||||
def create_exercise():
|
||||
name = request.form.get("name")
|
||||
attribute_ids = request.form.getlist('attribute_ids')
|
||||
exercise = db.create_exercise(name, attribute_ids)
|
||||
db.activityRequest.log(current_user.id, 'CREATE_EXERCISE', 'exercise', exercise['exercise_id'], f"Created exercise: {name}")
|
||||
return render_template('partials/exercise.html',
|
||||
exercise_id=exercise['exercise_id'],
|
||||
name=exercise['name'],
|
||||
attributes=exercise['attributes'])
|
||||
|
||||
|
||||
@exercises_bp.route("/exercise/<int:exercise_id>", methods=['GET'])
|
||||
def get_exercise(exercise_id):
|
||||
exercise = db.get_exercise(exercise_id)
|
||||
return render_template('partials/exercise.html',
|
||||
exercise_id=exercise_id,
|
||||
name=exercise['name'],
|
||||
attributes=exercise['attributes'])
|
||||
|
||||
|
||||
@exercises_bp.route("/exercise/<int:exercise_id>/edit_form", methods=['GET'])
|
||||
@login_required
|
||||
def get_exercise_edit_form(exercise_id):
|
||||
exercise = db.get_exercise(exercise_id)
|
||||
all_attributes = db.exercises.get_attributes_by_category()
|
||||
|
||||
# Format options for custom_select
|
||||
formatted_options = {}
|
||||
ex_attr_ids = [a['attribute_id'] for a in exercise['attributes']]
|
||||
for cat, attrs in all_attributes.items():
|
||||
formatted_options[cat] = [
|
||||
{
|
||||
"id": a['attribute_id'],
|
||||
"name": a['name'],
|
||||
"selected": a['attribute_id'] in ex_attr_ids
|
||||
} for a in attrs
|
||||
]
|
||||
|
||||
return render_template('partials/exercise.html',
|
||||
exercise_id=exercise_id,
|
||||
name=exercise['name'],
|
||||
attributes=exercise['attributes'],
|
||||
all_attributes=formatted_options,
|
||||
is_edit=True)
|
||||
|
||||
|
||||
@exercises_bp.route("/exercise/<int:exercise_id>/update", methods=['PUT'])
|
||||
@login_required
|
||||
def update_exercise(exercise_id):
|
||||
new_name = request.form.get('name')
|
||||
attribute_ids = request.form.getlist('attribute_ids')
|
||||
exercise = db.update_exercise(exercise_id, new_name, attribute_ids)
|
||||
db.activityRequest.log(current_user.id, 'UPDATE_EXERCISE', 'exercise', exercise_id, f"Updated exercise: {new_name}")
|
||||
return render_template('partials/exercise.html',
|
||||
exercise_id=exercise_id,
|
||||
name=exercise['name'],
|
||||
attributes=exercise['attributes'])
|
||||
|
||||
|
||||
@exercises_bp.route("/exercises/get")
|
||||
def get_exercises():
|
||||
query = request.args.get('query')
|
||||
person_id = request.args.get('person_id', type=int)
|
||||
exercises = db.exercises.get(query)
|
||||
return render_template('partials/exercise/exercise_dropdown.html', exercises=exercises, person_id=person_id)
|
||||
|
||||
@exercises_bp.route("/exercise/<int:exercise_id>/edit_name", methods=['GET', 'POST'])
|
||||
@login_required
|
||||
def edit_exercise_name(exercise_id):
|
||||
exercise = db.exercises.get_exercise(exercise_id)
|
||||
person_id = request.args.get('person_id', type=int)
|
||||
if request.method == 'GET':
|
||||
return render_template('partials/exercise/edit_exercise_name.html', exercise=exercise, person_id=person_id)
|
||||
else:
|
||||
updated_name = request.form['name']
|
||||
updated_exercise = db.exercises.update_exercise_name(exercise_id, updated_name)
|
||||
return render_template('partials/exercise/exercise_list_item.html', exercise=updated_exercise, person_id=person_id)
|
||||
|
||||
@exercises_bp.route("/exercises/add", methods=['POST'])
|
||||
@login_required
|
||||
def add_exercise():
|
||||
exercise_name = request.form['query']
|
||||
new_exercise = db.exercises.add_exercise(exercise_name)
|
||||
person_id = request.args.get('person_id', type=int)
|
||||
return render_template('partials/exercise/exercise_list_item.html', exercise=new_exercise, person_id=person_id)
|
||||
|
||||
@exercises_bp.route("/exercise/<int:exercise_id>/delete", methods=['DELETE'])
|
||||
@login_required
|
||||
@admin_required
|
||||
def delete_exercise(exercise_id):
|
||||
exercise = db.get_exercise(exercise_id)
|
||||
db.exercises.delete_exercise(exercise_id)
|
||||
db.activityRequest.log(current_user.id, 'DELETE_EXERCISE', 'exercise', exercise_id, f"Deleted exercise: {exercise['name']}")
|
||||
return ""
|
||||
@@ -216,7 +216,26 @@ def get_topset(person_id, workout_id, topset_id):
|
||||
def get_topset_edit_form(person_id, workout_id, topset_id):
|
||||
exercises = db.get_all_exercises()
|
||||
topset = db.get_topset(topset_id)
|
||||
return render_template('partials/topset.html', person_id=person_id, workout_id=workout_id, topset_id=topset_id, exercises=exercises, exercise_id=topset.get('exercise_id'), exercise_name=topset.get('exercise_name'), repetitions=topset.get('repetitions'), weight=topset.get('weight'), is_edit=True)
|
||||
|
||||
# Format exercises for custom_select
|
||||
formatted_exercises = [
|
||||
{
|
||||
"exercise_id": ex['exercise_id'],
|
||||
"name": ex['name'],
|
||||
"selected": ex['exercise_id'] == topset.get('exercise_id')
|
||||
} for ex in exercises
|
||||
]
|
||||
|
||||
return render_template('partials/topset.html',
|
||||
person_id=person_id,
|
||||
workout_id=workout_id,
|
||||
topset_id=topset_id,
|
||||
exercises=formatted_exercises,
|
||||
exercise_id=topset.get('exercise_id'),
|
||||
exercise_name=topset.get('exercise_name'),
|
||||
repetitions=topset.get('repetitions'),
|
||||
weight=topset.get('weight'),
|
||||
is_edit=True)
|
||||
|
||||
@workout_bp.route("/person/<int:person_id>/workout/<int:workout_id>/topset", methods=['POST'])
|
||||
@login_required
|
||||
|
||||
Reference in New Issue
Block a user