summaryrefslogtreecommitdiff
path: root/app/routes.py
blob: 8f5d8c1cfe1dd8724b942354c4ec9df335ffeb73 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
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, WorkoutCreateForm
from tables import User, Workout

@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')

@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)

@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():
    return render_template('workout/record.html')

@app.route("/workout/select", methods=['GET'])
@login_required
def selectWorkout():
    return render_template('workout/select.html')