fix: workouts sql improvements
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
CREATE TABLE exercises (
|
CREATE TABLE exercises (
|
||||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||||
name TEXT NOT NULL,
|
name TEXT NOT NULL,
|
||||||
user_id UUID REFERENCES users(id) ON DELETE CASCADE,
|
user_id UUID REFERENCES users(id) ON DELETE RESTRICT,
|
||||||
equipment TEXT[] NOT NULL DEFAULT '{}'
|
equipment TEXT[] NOT NULL DEFAULT '{}'
|
||||||
CHECK (
|
CHECK (
|
||||||
equipment <@ ARRAY [
|
equipment <@ ARRAY [
|
||||||
@@ -25,7 +25,8 @@ CREATE TABLE exercises (
|
|||||||
modified_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
modified_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE UNIQUE INDEX exercises_name_key ON exercises (lower(name));
|
CREATE UNIQUE INDEX exercises_name_shared_key ON exercises (lower(name)) WHERE user_id IS NULL;
|
||||||
|
CREATE UNIQUE INDEX exercises_name_personal_key ON exercises (user_id, lower(name)) WHERE user_id IS NOT NULL;
|
||||||
CREATE INDEX exercises_equipment_idx ON exercises USING gin (equipment);
|
CREATE INDEX exercises_equipment_idx ON exercises USING gin (equipment);
|
||||||
CREATE INDEX exercises_tags_idx ON exercises USING gin (tags);
|
CREATE INDEX exercises_tags_idx ON exercises USING gin (tags);
|
||||||
|
|
||||||
@@ -47,19 +48,23 @@ CREATE TABLE template_exercises (
|
|||||||
target_sets SMALLINT NOT NULL,
|
target_sets SMALLINT NOT NULL,
|
||||||
target_reps SMALLINT,
|
target_reps SMALLINT,
|
||||||
target_seconds SMALLINT,
|
target_seconds SMALLINT,
|
||||||
|
target_to_failure BOOLEAN,
|
||||||
|
rest_seconds SMALLINT,
|
||||||
notes TEXT,
|
notes TEXT,
|
||||||
modified_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
modified_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||||
|
|
||||||
PRIMARY KEY (template_id, exercise_id),
|
PRIMARY KEY (template_id, exercise_id),
|
||||||
|
|
||||||
CONSTRAINT target_has_number CHECK (target_reps IS NOT NULL OR target_seconds IS NOT NULL)
|
CONSTRAINT has_target CHECK (target_reps IS NOT NULL OR target_seconds IS NOT NULL OR target_to_failure IS TRUE)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
CREATE TABLE bodyweight_logs (
|
CREATE TABLE bodyweight_logs (
|
||||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||||
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||||
bodyweight_kg NUMERIC(5,2) NOT NULL,
|
bodyweight NUMERIC(5,2) NOT NULL,
|
||||||
|
unit TEXT NOT NULL DEFAULT 'kg'
|
||||||
|
CHECK (unit in ('kg', 'lbs')),
|
||||||
logged_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
logged_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||||
modified_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
modified_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||||
);
|
);
|
||||||
@@ -72,6 +77,7 @@ CREATE TABLE workouts (
|
|||||||
template_id UUID REFERENCES templates(id) ON DELETE SET NULL,
|
template_id UUID REFERENCES templates(id) ON DELETE SET NULL,
|
||||||
started_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
started_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||||
ended_at TIMESTAMPTZ,
|
ended_at TIMESTAMPTZ,
|
||||||
|
rpe SMALLINT CHECK (rpe BETWEEN 1 AND 10),
|
||||||
notes TEXT,
|
notes TEXT,
|
||||||
modified_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
modified_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||||
deleted_at TIMESTAMPTZ
|
deleted_at TIMESTAMPTZ
|
||||||
@@ -87,7 +93,9 @@ CREATE TABLE workout_sets (
|
|||||||
logged_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
logged_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||||
reps SMALLINT,
|
reps SMALLINT,
|
||||||
seconds SMALLINT,
|
seconds SMALLINT,
|
||||||
weight_kg NUMERIC(5,2),
|
weight NUMERIC(5,2),
|
||||||
|
unit TEXT NOT NULL DEFAULT 'kg'
|
||||||
|
CHECK (unit in ('kg', 'lbs')),
|
||||||
rpe SMALLINT CHECK (rpe BETWEEN 1 AND 10),
|
rpe SMALLINT CHECK (rpe BETWEEN 1 AND 10),
|
||||||
type TEXT NOT NULL DEFAULT 'working'
|
type TEXT NOT NULL DEFAULT 'working'
|
||||||
CHECK (type IN ('warm-up', 'working', 'drop')),
|
CHECK (type IN ('warm-up', 'working', 'drop')),
|
||||||
@@ -108,7 +116,7 @@ INSERT INTO exercises (name, metric, load, tags, equipment) VALUES
|
|||||||
('Pike push-up', 'reps', 'bodyweight', '{push,shoulders}', '{floor,rings,parallettes}'),
|
('Pike push-up', 'reps', 'bodyweight', '{push,shoulders}', '{floor,rings,parallettes}'),
|
||||||
('Dip', 'reps', 'bodyweight', '{push,chest,triceps}', '{rings,parallel_bars}'),
|
('Dip', 'reps', 'bodyweight', '{push,chest,triceps}', '{rings,parallel_bars}'),
|
||||||
('Handstand hold', 'seconds', 'bodyweight', '{push,shoulders,skill}', '{floor,rings,parallettes}'),
|
('Handstand hold', 'seconds', 'bodyweight', '{push,shoulders,skill}', '{floor,rings,parallettes}'),
|
||||||
('Handstand Push-up', 'reps', 'bodyweight', '{push,shoulders,skill}', '{floor,rings,parallettes}'),
|
('Handstand push-up', 'reps', 'bodyweight', '{push,shoulders,skill}', '{floor,rings,parallettes}'),
|
||||||
('Pull-up', 'reps', 'bodyweight', '{pull,back,biceps}', '{rings,pull_up_bar}'),
|
('Pull-up', 'reps', 'bodyweight', '{pull,back,biceps}', '{rings,pull_up_bar}'),
|
||||||
('Chin-up', 'reps', 'bodyweight', '{pull,back,biceps}', '{rings,pull_up_bar}'),
|
('Chin-up', 'reps', 'bodyweight', '{pull,back,biceps}', '{rings,pull_up_bar}'),
|
||||||
('Inverted row', 'reps', 'bodyweight', '{pull,back}', '{rings,parallel_bars,low_bar}'),
|
('Inverted row', 'reps', 'bodyweight', '{pull,back}', '{rings,parallel_bars,low_bar}'),
|
||||||
@@ -127,3 +135,9 @@ INSERT INTO exercises (name, metric, load, tags, equipment) VALUES
|
|||||||
('Hanging leg raise', 'reps', 'bodyweight', '{core}', '{rings,pull_up_bar}'),
|
('Hanging leg raise', 'reps', 'bodyweight', '{core}', '{rings,pull_up_bar}'),
|
||||||
('Face pull', 'reps', 'bodyweight', '{pull,shoulders}', '{rings,resistance_band}'),
|
('Face pull', 'reps', 'bodyweight', '{pull,shoulders}', '{rings,resistance_band}'),
|
||||||
('Lateral raise', 'reps', 'absolute', '{shoulders,isolation}', '{floor}');
|
('Lateral raise', 'reps', 'absolute', '{shoulders,isolation}', '{floor}');
|
||||||
|
|
||||||
|
UPDATE exercises SET progresses_from_id = (SELECT id FROM exercises WHERE name = 'Pike push-up')
|
||||||
|
WHERE name = 'Handstand push-up';
|
||||||
|
UPDATE exercises SET progresses_from_id = (SELECT id FROM exercises WHERE name = 'Dead hang')
|
||||||
|
WHERE name = 'One arm dead hang';
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user