diff --git a/migrations/000005_exercises.down.sql b/migrations/000005_exercises.down.sql index 711b267..39562da 100644 --- a/migrations/000005_exercises.down.sql +++ b/migrations/000005_exercises.down.sql @@ -1,7 +1,22 @@ -DROP TABLE IF EXISTS exercise_variations; -DROP TABLE IF EXISTS exercise_equipment; -DROP TABLE IF EXISTS exercise_muscle_groups; -DROP TABLE IF EXISTS exercises; -DROP TABLE IF EXISTS equipment; -DROP TABLE IF EXISTS muscle_groups; +DROP INDEX IF EXISTS idx_exercise_variations_variation_id; +DROP INDEX IF EXISTS idx_exercise_variations_exercise_id; +DROP INDEX IF EXISTS idx_exercise_equipment_equipment_id; +DROP INDEX IF EXISTS idx_exercise_equipment_exercise_id; +DROP INDEX IF EXISTS idx_exercise_muscle_groups_muscle_group_id; +DROP INDEX IF EXISTS idx_exercise_muscle_groups_exercise_id; +DROP INDEX IF EXISTS idx_equipment_name; +DROP INDEX IF EXISTS idx_equipment_wger_id; +DROP INDEX IF EXISTS idx_muscle_groups_name; +DROP INDEX IF EXISTS idx_muscle_groups_wger_id; +DROP INDEX IF EXISTS idx_exercises_expires_at; +DROP INDEX IF EXISTS idx_exercises_cached_at; +DROP INDEX IF EXISTS idx_exercises_name; +DROP INDEX IF EXISTS idx_exercises_category; +DROP INDEX IF EXISTS idx_exercises_wger_id; +DROP TABLE IF EXISTS exercise_variations CASCADE; +DROP TABLE IF EXISTS exercise_equipment CASCADE; +DROP TABLE IF EXISTS exercise_muscle_groups CASCADE; +DROP TABLE IF EXISTS exercises CASCADE; +DROP TABLE IF EXISTS equipment CASCADE; +DROP TABLE IF EXISTS muscle_groups CASCADE; diff --git a/migrations/000005_exercises.up.sql b/migrations/000005_exercises.up.sql index 1644321..d40f000 100644 --- a/migrations/000005_exercises.up.sql +++ b/migrations/000005_exercises.up.sql @@ -1,4 +1,4 @@ -CREATE TABLE muscle_groups ( +CREATE TABLE IF NOT EXISTS muscle_groups ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), wger_id INTEGER NOT NULL UNIQUE, name VARCHAR(100) NOT NULL, @@ -8,7 +8,20 @@ CREATE TABLE muscle_groups ( updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() ); -CREATE TABLE equipment ( +DO $$ +BEGIN + IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'muscle_groups' AND column_name = 'exercise_db_id') THEN + ALTER TABLE muscle_groups RENAME COLUMN exercise_db_id TO wger_id; + END IF; + IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'muscle_groups' AND column_name = 'name_en') THEN + ALTER TABLE muscle_groups ADD COLUMN name_en VARCHAR(100) NOT NULL DEFAULT ''; + END IF; + IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'muscle_groups' AND column_name = 'is_front') THEN + ALTER TABLE muscle_groups ADD COLUMN is_front BOOLEAN NOT NULL DEFAULT true; + END IF; +END $$; + +CREATE TABLE IF NOT EXISTS equipment ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), wger_id INTEGER NOT NULL UNIQUE, name VARCHAR(100) NOT NULL, @@ -16,7 +29,14 @@ CREATE TABLE equipment ( updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() ); -CREATE TABLE exercises ( +DO $$ +BEGIN + IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'equipment' AND column_name = 'exercise_db_id') THEN + ALTER TABLE equipment RENAME COLUMN exercise_db_id TO wger_id; + END IF; +END $$; + +CREATE TABLE IF NOT EXISTS exercises ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), wger_id INTEGER NOT NULL UNIQUE, wger_uuid VARCHAR(255) NOT NULL DEFAULT '', @@ -33,7 +53,42 @@ CREATE TABLE exercises ( updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() ); -CREATE TABLE exercise_muscle_groups ( +DO $$ +BEGIN + IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'exercises' AND column_name = 'exercise_db_id') THEN + ALTER TABLE exercises RENAME COLUMN exercise_db_id TO wger_id; + END IF; + IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'exercises' AND column_name = 'wger_uuid') THEN + ALTER TABLE exercises ADD COLUMN wger_uuid VARCHAR(255) NOT NULL DEFAULT ''; + END IF; + IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'exercises' AND column_name = 'instructions') THEN + ALTER TABLE exercises DROP COLUMN instructions; + END IF; + IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'exercises' AND column_name = 'tips') THEN + ALTER TABLE exercises DROP COLUMN tips; + END IF; + IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'exercises' AND column_name = 'status') THEN + ALTER TABLE exercises DROP COLUMN status; + END IF; + IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'exercises' AND column_name = 'name_original') THEN + ALTER TABLE exercises DROP COLUMN name_original; + END IF; + IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'exercises' AND column_name = 'uuid') THEN + ALTER TABLE exercises DROP COLUMN uuid; + END IF; + IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'exercises' AND column_name = 'description') THEN + ALTER TABLE exercises ALTER COLUMN description TYPE TEXT; + ALTER TABLE exercises ALTER COLUMN description SET NOT NULL; + ALTER TABLE exercises ALTER COLUMN description SET DEFAULT ''; + END IF; + IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'exercises' AND column_name = 'license_author') THEN + ALTER TABLE exercises ALTER COLUMN license_author TYPE VARCHAR(255); + ALTER TABLE exercises ALTER COLUMN license_author SET NOT NULL; + ALTER TABLE exercises ALTER COLUMN license_author SET DEFAULT ''; + END IF; +END $$; + +CREATE TABLE IF NOT EXISTS exercise_muscle_groups ( exercise_id UUID NOT NULL REFERENCES exercises(id) ON DELETE CASCADE, muscle_group_id UUID NOT NULL REFERENCES muscle_groups(id) ON DELETE CASCADE, is_primary BOOLEAN NOT NULL DEFAULT true, @@ -41,39 +96,52 @@ CREATE TABLE exercise_muscle_groups ( PRIMARY KEY (exercise_id, muscle_group_id, is_primary) ); -CREATE TABLE exercise_equipment ( +CREATE TABLE IF NOT EXISTS exercise_equipment ( exercise_id UUID NOT NULL REFERENCES exercises(id) ON DELETE CASCADE, equipment_id UUID NOT NULL REFERENCES equipment(id) ON DELETE CASCADE, created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), PRIMARY KEY (exercise_id, equipment_id) ); -CREATE TABLE exercise_variations ( - exercise_id UUID NOT NULL REFERENCES exercises(id) ON DELETE CASCADE, - variation_exercise_id UUID NOT NULL REFERENCES exercises(id) ON DELETE CASCADE, - created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), - PRIMARY KEY (exercise_id, variation_exercise_id), - CHECK (exercise_id != variation_exercise_id) -); +DO $$ +BEGIN + IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'exercise_alternatives') THEN + ALTER TABLE exercise_alternatives RENAME TO exercise_variations; + ALTER TABLE exercise_variations RENAME COLUMN alternative_exercise_id TO variation_exercise_id; + ELSE + CREATE TABLE IF NOT EXISTS exercise_variations ( + exercise_id UUID NOT NULL REFERENCES exercises(id) ON DELETE CASCADE, + variation_exercise_id UUID NOT NULL REFERENCES exercises(id) ON DELETE CASCADE, + created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), + PRIMARY KEY (exercise_id, variation_exercise_id), + CHECK (exercise_id != variation_exercise_id) + ); + END IF; +END $$; -CREATE INDEX idx_exercises_wger_id ON exercises(wger_id); -CREATE INDEX idx_exercises_category ON exercises(category); -CREATE INDEX idx_exercises_name ON exercises(name); -CREATE INDEX idx_exercises_cached_at ON exercises(cached_at); -CREATE INDEX idx_exercises_expires_at ON exercises(expires_at); +DROP INDEX IF EXISTS idx_exercises_exercise_db_id; +DROP INDEX IF EXISTS idx_muscle_groups_exercise_db_id; +DROP INDEX IF EXISTS idx_equipment_exercise_db_id; +DROP INDEX IF EXISTS idx_exercise_alternatives_exercise_id; +DROP INDEX IF EXISTS idx_exercise_alternatives_alternative_id; -CREATE INDEX idx_muscle_groups_wger_id ON muscle_groups(wger_id); -CREATE INDEX idx_muscle_groups_name ON muscle_groups(name); +CREATE INDEX IF NOT EXISTS idx_exercises_wger_id ON exercises(wger_id); +CREATE INDEX IF NOT EXISTS idx_exercises_category ON exercises(category); +CREATE INDEX IF NOT EXISTS idx_exercises_name ON exercises(name); +CREATE INDEX IF NOT EXISTS idx_exercises_cached_at ON exercises(cached_at); +CREATE INDEX IF NOT EXISTS idx_exercises_expires_at ON exercises(expires_at); -CREATE INDEX idx_equipment_wger_id ON equipment(wger_id); -CREATE INDEX idx_equipment_name ON equipment(name); +CREATE INDEX IF NOT EXISTS idx_muscle_groups_wger_id ON muscle_groups(wger_id); +CREATE INDEX IF NOT EXISTS idx_muscle_groups_name ON muscle_groups(name); -CREATE INDEX idx_exercise_muscle_groups_exercise_id ON exercise_muscle_groups(exercise_id); -CREATE INDEX idx_exercise_muscle_groups_muscle_group_id ON exercise_muscle_groups(muscle_group_id); +CREATE INDEX IF NOT EXISTS idx_equipment_wger_id ON equipment(wger_id); +CREATE INDEX IF NOT EXISTS idx_equipment_name ON equipment(name); -CREATE INDEX idx_exercise_equipment_exercise_id ON exercise_equipment(exercise_id); -CREATE INDEX idx_exercise_equipment_equipment_id ON exercise_equipment(equipment_id); +CREATE INDEX IF NOT EXISTS idx_exercise_muscle_groups_exercise_id ON exercise_muscle_groups(exercise_id); +CREATE INDEX IF NOT EXISTS idx_exercise_muscle_groups_muscle_group_id ON exercise_muscle_groups(muscle_group_id); -CREATE INDEX idx_exercise_variations_exercise_id ON exercise_variations(exercise_id); -CREATE INDEX idx_exercise_variations_variation_id ON exercise_variations(variation_exercise_id); +CREATE INDEX IF NOT EXISTS idx_exercise_equipment_exercise_id ON exercise_equipment(exercise_id); +CREATE INDEX IF NOT EXISTS idx_exercise_equipment_equipment_id ON exercise_equipment(equipment_id); +CREATE INDEX IF NOT EXISTS idx_exercise_variations_exercise_id ON exercise_variations(exercise_id); +CREATE INDEX IF NOT EXISTS idx_exercise_variations_variation_id ON exercise_variations(variation_exercise_id);