shinkan-jinkendo/backend/migrations/021_import_skills_from_matrix.sql
Lars 07b1cd8209
Some checks failed
Deploy Development / deploy (push) Successful in 36s
Test Suite / lint-backend (push) Successful in 1s
Test Suite / build-frontend (push) Successful in 6s
Test Suite / playwright-tests (push) Failing after 40s
chore: clean up docker-compose files and enhance SQL migration for skills
- Removed version specification from docker-compose.dev-env.yml and docker-compose.yml for consistency.
- Added a unique constraint to the skills table in the SQL migration to prevent duplicate entries, ensuring data integrity during imports.
- Updated test cases in dev-smoke-test.spec.js to improve locator strategies and enhance viewport handling for mobile navigation.
2026-04-29 13:41:17 +02:00

59 lines
2.8 KiB
SQL

-- Migration 021: Import Skills from Fähigkeitsmatrix
-- One-time import of skills with categories from karatetrainer.net
-- Source: https://karatetrainer.net/index.php?title=Fähigkeitsmatrix
-- ON CONFLICT (name) erfordert einen UNIQUE-Constraint auf skills.name (003/007 legten keinen an)
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM pg_constraint c
JOIN pg_class t ON c.conrelid = t.oid
WHERE t.relname = 'skills' AND c.contype = 'u' AND c.conname = 'skills_name_unique'
) THEN
ALTER TABLE skills ADD CONSTRAINT skills_name_unique UNIQUE (name);
END IF;
END $$;
-- Create skill categories first
INSERT INTO skill_categories (name, description, sort_order) VALUES
('Kihon', 'Grundtechniken', 1),
('Kumite', 'Kampf', 2),
('Kata', 'Formen', 3),
('Selbstverteidigung', 'Selbstschutz und Gefahrenabwehr', 4),
('Koordination', 'Koordinative Fähigkeiten', 5),
('Kondition', 'Konditionelle Fähigkeiten', 6),
('Kognition', 'Kognitive Fähigkeiten', 7),
('Soziale Fähigkeiten', 'Sozialkompetenzen', 8),
('Psychische Fähigkeiten', 'Mentale Stärke', 9)
ON CONFLICT (name) DO NOTHING;
-- Import skills (name unique, category by name lookup)
INSERT INTO skills (name, description, category_id)
SELECT
skill_name,
skill_description,
(SELECT id FROM skill_categories WHERE name = category_name LIMIT 1)
FROM (VALUES
('Dachi Waza', 'Standtechniken - stabiler Stand mit korrekter Gewichtsverteilung', 'Kihon'),
('Uke Waza', 'Blocktechniken - Abwehr von Angriffen', 'Kihon'),
('Zuki Waza', 'Stoßtechniken - gerade und kreisförmige Stöße', 'Kihon'),
('Geri Waza', 'Tritttechniken - verschiedene Kicks', 'Kihon'),
('Beinarbeit', 'Grundlegende Bewegungen im Kumite', 'Kumite'),
('Distanzkontrolle', 'Kontrolle der Kampfdistanz', 'Kumite'),
('Flexibilität', 'Beweglichkeit und Dehnfähigkeit', 'Kondition'),
('Präzision', 'Treffergenauigkeit', 'Kumite'),
('Bewegungsschnelligkeit', 'Schnelligkeit der Bewegungsausführung', 'Kondition'),
('Anaerobe Ausdauer', 'Ausdauer bei hoher Intensität', 'Kondition'),
('Schnelligkeitsausdauer', 'Ausdauer bei schnellen Bewegungen', 'Kondition'),
('Antizipation', 'Vorhersage gegnerischer Aktionen', 'Kognition'),
('Reaktionsschnelligkeit', 'Reaktion auf Reize', 'Koordination'),
('Timing', 'Zeitliche Abstimmung von Aktionen', 'Kumite'),
('Fokus', 'Konzentration auf das Wesentliche', 'Psychische Fähigkeiten'),
('Mentale Stärke', 'Psychische Belastbarkeit', 'Psychische Fähigkeiten'),
('Kata Ablauf', 'Korrekte Ausführung der Kata-Sequenz', 'Kata'),
('Bunkai', 'Anwendung der Kata-Techniken', 'Kata')
) AS skills(skill_name, skill_description, category_name)
ON CONFLICT (name) DO UPDATE SET
description = EXCLUDED.description,
category_id = EXCLUDED.category_id;