189 Commits

Author SHA1 Message Date
Peter Stockings
e7d125d57b Move workout tag logic into tags blueprint 2025-04-21 20:13:30 +10:00
Peter Stockings
c88d28b47c Fix issue with newly added workout tags not being rendered 2025-04-20 17:05:32 +10:00
Peter Stockings
7aa7f9b8dc Partial refactor of tags functionality
Still need to move tags db logic to BP and move workout tag logic to BP as well
2025-04-19 21:10:34 +10:00
Peter Stockings
e947feb3e3 refactor(sql_explorer): Replace Plotly with SVG rendering for plots
Replaces the Plotly-based graph generation in the SQL Explorer with direct SVG rendering within an HTML template, similar to the exercise progress sparklines.

- Modifies `routes/sql_explorer.py` endpoints (`plot_query`, `plot_unsaved_query`) to fetch raw data instead of using pandas/Plotly.
- Adds `utils.prepare_svg_plot_data` to process raw SQL results, determine plot type (scatter, line, bar, table), normalize data, and prepare it for SVG.
- Creates `templates/partials/sql_explorer/svg_plot.html` to render the SVG plot with axes, ticks, labels, and basic tooltips.
- Removes the `generate_plot` function's usage for SQL Explorer and the direct dependency on Plotly for this feature.
2025-04-15 19:34:26 +10:00
Peter Stockings
51ec18c461 feat: Add dismissible exercise progress graph to workout page
Adds a feature to view exercise progress directly from the workout page.

- Modifies `templates/partials/topset.html`.
- Adds a graph icon next to the exercise name in the topset list.
- Clicking the icon uses HTMX to fetch and display the progress graph for that exercise inline in a new table row.
- Implements a dismiss button using hyperscript to hide the graph after viewing.
2025-04-13 19:20:53 +10:00
Peter Stockings
bd8a3fcdb2 refactor: Use REST API for Gemini SQL generation
- Modified the `_generate_sql_from_natural_language` helper function in `routes/sql_explorer.py` to use direct REST API calls via the `requests` library instead of the `google-generativeai` Python library.
- Added `requests` and `json` imports and removed the `google-generativeai` import.
- Updated error handling for API communication and response parsing.
- Updated the corresponding changelog entry.
2025-04-05 21:17:56 +11:00
Peter Stockings
a8fe28339b I have refactored the SQL Explorer functionality into its own blueprint (routes/sql_explorer.py) with a /sql URL prefix. This involved moving the relevant routes from app.py, registering the new blueprint, removing the old routes, updating url_for calls in the templates, and documenting the change in the changelog.
Here is a conventional commit message summarizing the changes:

```
feat: Refactor SQL Explorer into blueprint

- Moved SQL Explorer routes (view explorer, save/load/execute/delete queries, view schema, plot queries) from `app.py` into a new blueprint at `routes/sql_explorer.py`.
- Added `/sql` URL prefix to the blueprint.
- Registered the new `sql_explorer_bp` blueprint in `app.py`.
- Removed the original SQL Explorer route definitions from `app.py`.
- Updated `url_for` calls in relevant templates (`sql_explorer.html`, `partials/sql_explorer/sql_query.html`, `base.html`) to reference the new blueprint endpoints (e.g., `sql_explorer.sql_explorer`).
- Updated `templates/changelog/changelog.html` to document this refactoring.
```
2025-03-31 23:00:54 +11:00
Peter Stockings
eaeb4ab2c8 feat: Refactor workout functionality into blueprint
- Moved workout-related routes (create/delete/edit workouts, topsets, tags, start dates, show workout) from `app.py` into a new blueprint at `routes/workout.py`.
- Integrated workout view model logic from `features/workout.py` directly into `routes/workout.py` helper function `_get_workout_view_model`.
- Removed `features/workout.py` and the corresponding class instantiation in `db.py`.
- Registered the new `workout_bp` blueprint in `app.py`.
- Removed the original workout route definitions from `app.py`.
- Updated `url_for` calls in relevant templates (`workout.html`, `person_overview.html`, `partials/workout_tags.html`, `partials/topset.html`, `partials/start_date.html`, `partials/new_set_form.html`, `notes.html`, `calendar.html`) to reference the new blueprint endpoints (e.g., `workout.create_workout`).
- Updated `templates/changelog/changelog.html` to document this refactoring.
2025-03-31 22:38:48 +11:00
Peter Stockings
78436b230b feat: Refactor notes functionality into blueprint
- Moved notes-related routes (viewing/editing workout notes) from `app.py` into a new blueprint at `routes/notes.py`.
- Integrated notes-specific database logic (fetching and updating notes) directly into `routes/notes.py` helper functions, removing the corresponding methods from `db.py` for better encapsulation.
- Registered the new `notes_bp` blueprint in `app.py`.
- Removed the original notes route definitions from `app.py`.
- Updated `url_for` calls in `templates/partials/workout_note.html` to reference the new blueprint endpoints (e.g., `notes.get_person_notes`).
- Updated `templates/changelog/changelog.html` to document this refactoring in its own entry.
2025-03-31 22:08:47 +11:00
Peter Stockings
6095e76f10 Here is a conventional commit message summarizing the refactoring work:
```
feat: Refactor calendar feature into blueprint

- Moved calendar logic from `features/calendar.py` and `app.py` into a new blueprint at `routes/calendar.py`.
- Removed the `Calendar` class and refactored logic into helper functions within the blueprint module for better organization and readability.
- Eliminated the `pandas` dependency for date range generation, using standard `datetime` operations instead.
- Resolved circular import issues between `db.py`, `extensions.py`, and `routes/calendar.py` by adjusting import locations.
- Corrected `url_for` calls in templates (`calendar.html`, `partials/people_link.html`) to reference the new blueprint endpoint (`calendar.get_calendar`).
- Fixed an `AttributeError` related to HTMX request checking in the calendar route.
- Corrected `AttributeError` related to `.date()` calls on `datetime.date` objects in view processing functions.
- Updated `templates/changelog/changelog.html` to document the refactoring and associated fixes.
```
2025-03-30 22:20:48 +11:00
Peter Stockings
39e91f2655 Add support to set degree of line of best fit for exercise progress graphs in custom view 2025-02-06 23:43:10 +11:00
Peter Stockings
b0296be9a0 On SQL explorer page add a button to copy the create tables database schema 2025-02-01 23:50:09 +11:00
Peter Stockings
5fe003bcbf Add loading icons to sql plot and add clear button to results container 2025-02-01 21:06:01 +11:00
Peter Stockings
8b02307397 Add plot functionality to unsaved sql query and use htmx 2025-02-01 20:26:54 +11:00
Peter Stockings
55149c5ea9 Switch stats from camel case to snake case 2025-02-01 19:48:56 +11:00
Peter Stockings
a7592a29f6 Remove space in person id query param for tags 2025-01-27 13:14:55 +11:00
Peter Stockings
6b741e50d0 Swtich from person list to new overview page 2025-01-27 01:17:23 +11:00
Peter Stockings
0ed0c20e93 Add person graphs endpoint for workouts per week & PRs per week, consumed via dashboard, person overview and notes 2025-01-27 01:00:50 +11:00
Peter Stockings
527395d704 Make stats refresh, and add filter support to stats endpoint 2025-01-26 23:01:39 +11:00
Peter Stockings
2c8019ef7b Bugfix: Attempting to update a set would fail due to including multiple elements for exercise_id, repetition, & weight 2025-01-26 18:47:45 +11:00
Peter Stockings
b0fb8895df Start refactoring person overview (list) page, currently is accessible through tags and workout exercise select. Doesnt have any stats or graphs 2025-01-26 18:21:44 +11:00
Peter Stockings
78f2ce2317 Fix bug introduced by last commit in which exercise progress graph wouldnt load upon selecting a exercise 2025-01-24 22:21:18 +11:00
Peter Stockings
5ffb08a994 Fix issue selecting a new exercise 2025-01-19 21:34:45 +11:00
Peter Stockings
71bf4b640c whoops update column heading order after moving methods to 2nd pos 2024-11-10 18:35:28 +11:00
Peter Stockings
5bdb586a2c For endpoints page, remove faulty logic that attempted to persisted column view preferences and move Method column to 2nd pos 2024-11-10 18:31:44 +11:00
Peter Stockings
8b248bad17 Make endpoints column filter responsive 2024-11-10 18:15:33 +11:00
Peter Stockings
5db18cbf18 Clear exercise select dropdown when clear search is clicked 2024-11-10 18:01:30 +11:00
Peter Stockings
16cd4e93e3 Change exercise select input from text to search so it adds a clear button on the right 2024-11-10 17:50:13 +11:00
Peter Stockings
2d6c738e3e Max SQL query text box resize to query length 2024-11-09 23:18:57 +11:00
Peter Stockings
120a94ff45 Add page to list all flask endpoints with filter 2024-11-09 19:07:55 +11:00
Peter Stockings
c7013e0eac Add ability to plot saved queries using plotly, need to check performance in production, also need to improve generate_plot function 2024-11-09 16:49:08 +11:00
Peter Stockings
23def088bb Add ability to save and edit queries, still need to add ability to edit queries 2024-11-08 23:09:19 +11:00
Peter Stockings
90cb1c1451 Add styling to sql query text area 2024-11-08 21:57:48 +11:00
Peter Stockings
0f55d42f22 * Add SQL query executor
* Move mermaid.min.js to static asset
* Create templates for sql logic
2024-11-06 23:25:25 +11:00
Peter Stockings
616b57e1db Fix regression where selecting an exercise didnt populate reps/weight inputs with last set and resize progress graph on desktop 2024-11-05 15:04:06 +11:00
Peter Stockings
4fe9271555 Change 'No tags available' text to 'No tags' for workout tags 2024-11-05 15:02:54 +11:00
Peter Stockings
5938c9468b Fix error thrown when attempting to update exercise name 2024-11-04 23:14:56 +11:00
Peter Stockings
6ebac69911 Show 'No tags applied' on workouts when... 2024-11-04 22:36:27 +11:00
Peter Stockings
b5493e627c Fix tags, may have increased load on database while only using one query to fetch workout, topsets, and all tags 2024-11-04 22:33:08 +11:00
Peter Stockings
10326ccd7a Switch from using workout modal and change to workout page, still need to cleanup modal logic and templates. Need to fix workout tag functionality 2024-11-04 22:02:06 +11:00
Peter Stockings
64c3335c29 Prompt user for confirmation prior to deleting exercise 2024-11-04 16:55:31 +11:00
Peter Stockings
7d65f9b8e8 Add ability to add/delete exercises from dropdown 2024-11-04 16:46:22 +11:00
Peter Stockings
7d43965289 Add ability to edit exercise name from new dropdown, still WIP as I need to handle exercise selection and make it a component 2024-11-04 12:07:47 +11:00
Peter Stockings
e756607dc8 Add WIP of exercise live search, just testing speed in prod site 2024-11-03 09:45:48 +11:00
Peter Stockings
1384eb007b Add min/max filter filter for exercise sparkline graph 2024-07-29 21:27:30 +10:00
Peter Stockings
910437010d Add margin top to workout start date input 2024-04-11 18:42:14 +10:00
Peter Stockings
32a81df82a Add fade in transition to work out start date, tags, & note 2024-04-11 18:40:21 +10:00
Peter Stockings
0e5de89e81 Change sidebar link behaviour so it doesnt scroll to top of screen until content has loaded and add in loading spinner for person list in sidebar 2024-04-11 17:57:24 +10:00
Peter Stockings
f21454523f Fix kg per week/month for exercise progress graphs and remove useless formula 2024-04-04 20:34:27 +11:00
Peter Stockings
6dafdf71dd Add options to filter epoch for exercise progress graphs (1M, 3M, 6M, All), however if there isnt data in a selected epoch the endpoint returns 404. Havent bothered to look into to it, probs should clean up code as well 2024-04-03 20:31:13 +11:00