Added workouts database schema #25

Merged
robin merged 9 commits from dev into main 2026-08-28 14:47:14 +02:00
2 changed files with 34 additions and 2 deletions
Showing only changes of commit a4a84bed68 - Show all commits
@@ -1,3 +1,5 @@
DROP TABLE IF EXISTS workout_sets;
DROP TABLE IF EXISTS workouts;
DROP TABLE IF EXISTS template_exercises;
DROP TABLE IF EXISTS templates;
DROP TABLE IF EXISTS exercises;
DROP TABLE IF EXISTS exercises;
@@ -9,6 +9,7 @@ CREATE TABLE exercises (
'pull_up_bar',
'dip_bars',
'parallettes',
'resistance_band'
]::TEXT[]),
metric TEXT NOT NULL DEFAULT 'reps'
CHECK metric IN ('reps', 'seconds'),
@@ -42,4 +43,33 @@ CREATE TABLE template_exercises (
PRIMARY KEY (template_id, exercise_id)
);
-- todo: workouts, sets
CREATE TABLE workouts (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name TEXT NOT NULL,
template_id UUID REFERENCES templates(id) ON DELETE SET NULL,
started_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
ended_at TIMESTAMPTZ,
rpe smallint CHECK (rpe BETWEEN 1 AND 10),
bodyweight_kg NUMERIC(5,2),
notes TEXT
);
CREATE INDEX workouts_time_idx ON workouts (started_at DESC);
CREATE TABLE workout_sets (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
workout_id UUID NOT NULL REFERENCES workouts(id) ON DELETE CASCADE,
exercise_id UUID NOT NULL REFERENCES exercises(id) ON DELETE RESTRICT,
logged_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
reps SMALLINT,
seconds SMALLINT,
weight_kg NUMERIC(5,2),
note TEXT,
CONSTRAINT set_has_number CHECK (reps IS NOT NULL OR seconds IS NOT NULL)
);
CREATE INDEX sets_workout_idx ON workout_sets (workout_id, logged_at);
CREATE INDEX sets_exercise_ifx ON workout_sets (exercise_id, logged_at DESC);