From 6e1f164ba91634acc0a82309b1fd49ab27ffb17a Mon Sep 17 00:00:00 2001 From: Peter Stockings Date: Tue, 19 Jul 2022 19:55:11 +1000 Subject: [PATCH] Add api documentation with flasger --- app.py | 166 +++++++++++++++++++++++++++++++++++++++- templates/base.html | 19 ++++- templates/topset.html | 3 +- templates/workout.html | 10 ++- templates/workouts.html | 23 ++++-- 5 files changed, 204 insertions(+), 17 deletions(-) diff --git a/app.py b/app.py index 59d576c..8c7b4c2 100644 --- a/app.py +++ b/app.py @@ -1,8 +1,30 @@ -from flask import Flask, render_template, g, redirect, request, url_for +from flask import Flask, jsonify, render_template, g, redirect, request, url_for +from flasgger import Swagger import sqlite3 import datetime +template = { + "swagger": "2.0", + "info": { + "title": "WorkoutTracker API", + "description": "API for tracking topsets of workouts", + "contact": { + "responsibleOrganization": "ME", + "responsibleDeveloper": "Me", + "email": "me@me.com", + "url": "www.me.com", + }, + "version": "0.0.1" + }, + "schemes": [ + "http", + "https" + ], + "operationId": "getmyData" +} + app = Flask(__name__) +swagger = Swagger(app, template=template) DATABASE = 'workout.db' @@ -25,11 +47,35 @@ def query_db(query, args=(), one=False): @app.route("/") def dashboard(): + """Dashboard page + Displays stats and a list of all people and there rep maxes for each exercise + --- + tags: + - Dashboard + responses: + 200: + description: A list of all people and there rep maxes for each exercise + """ return render_template('index.html') @app.route("/person/") def display_workouts_for_person(person_id): + """Display all workouts for a person + Displays stats and a list of all people and there rep maxes for each exercise + --- + tags: + - Person + parameters: + - name: person_id + in: path + type: number + required: true + + responses: + 200: + description: A list of all people and there rep maxes for each exercise + """ person = query_db('SELECT * FROM Person WHERE PersonId=?', [person_id], one=True) @@ -77,8 +123,23 @@ def display_workouts_for_person(person_id): return render_template('workouts.html', person_id=person_id, person=person, workouts=transformed_workouts, exercises=exercises) -@app.route("/person//new_workout") +@app.route("/person//workout", methods=['POST']) def new_workout_for_person(person_id): + """Create new workout + Creates a workout with current date and then redirects to newly created workout + --- + tags: + - Workout + parameters: + - name: person_id + in: path + type: number + required: true + + responses: + 200: + description: View of newly created workout + """ person = query_db('SELECT * FROM Person WHERE PersonId=?', [person_id], one=True) @@ -98,6 +159,24 @@ def new_workout_for_person(person_id): @app.route("/person//workout/") def show_workout_for_person(person_id, workout_id): + """Display a workout + Displays a selected workout with options to edit/delete existing and add new topsets + --- + tags: + - Workout + parameters: + - name: person_id + in: path + type: number + required: true + - name: workout_id + in: path + type: number + required: true + responses: + 200: + description: A list of topsets in a selected workout + """ workout_info = query_db(""" SELECT P.Name, @@ -134,6 +213,25 @@ def show_workout_for_person(person_id, workout_id): @app.route("/person//workout//delete", methods=['GET', 'DELETE']) def delete_workout_from_person(person_id, workout_id): + """Delete workout + Deletes selected workout completed by a person + --- + tags: + - Workout + parameters: + - name: person_id + in: path + type: number + required: true + - name: workout_id + in: path + type: number + required: true + responses: + 200: + description: Redirect to workouts list page for person + """ + workout_info = query_db(""" SELECT P.Name, @@ -158,6 +256,28 @@ def delete_workout_from_person(person_id, workout_id): @app.route("/person//workout//topset/", methods=['GET', 'POST']) def show_topset_from_workout_for_person(person_id, workout_id, topset_id): + """Display/Create new top set + Displays stats and a list of all people and there rep maxes for each exercise + --- + tags: + - Topset + parameters: + - name: person_id + in: path + type: number + required: true + - name: workout_id + in: path + type: number + required: true + - name: topset_id + in: path + type: number + required: true + responses: + 200: + description: A list of topsets in a selected workout + """ topset = query_db(""" SELECT P.Name, @@ -190,11 +310,29 @@ def show_topset_from_workout_for_person(person_id, workout_id, topset_id): return redirect(url_for('show_workout_for_person', person_id=person_id, workout_id=workout_id)) - return render_template('topset.html', topset=topset, exercises=query_db('select * from Excercise')) + return render_template('topset.html', person_id=person_id, workout_id=workout_id, topset_id=topset_id, topset=topset, exercises=query_db('select * from Excercise')) @app.route("/person//workout//topset", methods=['POST']) def add_topset_to_workout_for_person(person_id, workout_id): + """Add top set to workout + Add a topset to a workout completed by a person + --- + tags: + - Topset + parameters: + - name: person_id + in: path + type: number + required: true + - name: workout_id + in: path + type: number + required: true + responses: + 200: + description: A list of topsets in a selected workout + """ workout_info = query_db(""" SELECT P.Name, @@ -223,6 +361,28 @@ def add_topset_to_workout_for_person(person_id, workout_id): @app.route("/person//workout//topset//delete", methods=['GET', 'DELETE']) def delete_topset_from_workout_for_person(person_id, workout_id, topset_id): + """Delete top set + Add a topset to a workout completed by a person + --- + tags: + - Topset + parameters: + - name: person_id + in: path + type: number + required: true + - name: workout_id + in: path + type: number + required: true + - name: topset_id + in: path + type: number + required: true + responses: + 200: + description: A list of topsets in a selected workout + """ topset = query_db(""" SELECT P.Name, diff --git a/templates/base.html b/templates/base.html index 473c01d..90508fa 100644 --- a/templates/base.html +++ b/templates/base.html @@ -36,10 +36,25 @@ - + Delete topset diff --git a/templates/workout.html b/templates/workout.html index dac8aa4..7c510ed 100644 --- a/templates/workout.html +++ b/templates/workout.html @@ -9,9 +9,13 @@

{{ workout_info['Name'] }}

{{ workout_info['StartDate'] }} - - Delete workout - +
+ +
diff --git a/templates/workouts.html b/templates/workouts.html index 69da186..074ce63 100644 --- a/templates/workouts.html +++ b/templates/workouts.html @@ -54,20 +54,27 @@ class="text-sm font-medium text-cyan-600 hover:bg-gray-100 rounded-lg inline-flex items-center p-2"> Edit - - Delete - + +
+ +
{% endfor %} - - New workout - + +
+ +
+