shinkan-jinkendo/backend/migrations/003_catalogs.sql
Lars b2bc8590c4
Some checks failed
Deploy Development / deploy (push) Failing after 4s
feat: Complete MVP setup - Docker, Frontend, Migrations, CI/CD
Docker & Deployment:
- docker-compose.yml (Prod: Port 3003/8003)
- docker-compose.dev-env.yml (Dev: Port 3098/8098)
- Backend Dockerfile (Python 3.12-slim)
- Frontend Dockerfile (Node 20 + Nginx)
- Gitea Actions (deploy-dev.yml, deploy-prod.yml)

Frontend:
- React 18 + Vite setup
- package.json, vite.config.js, index.html
- App.jsx (minimal with version display)
- api.js (complete API client)
- app.css + AuthContext from Mitai
- main.jsx entry point

Backend Migrations:
- 001_auth_membership.sql (Auth + Features + Tier Limits)
- 002_organization.sql (Clubs, Divisions, Training Groups)
- 003_catalogs.sql (Skills + Methods with sample data)

Documentation:
- .claude/rules/ (ARCHITECTURE, CODING_RULES, etc.)
- SHINKAN_PROJECT_SETUP.md (technical setup guide)

Server:
- Directories created on Pi: /home/lars/docker/shinkan[-dev]
- Gitea Runner configured and running

Ready for first deployment to dev.shinkan.jinkendo.de

version: 0.1.0
date: 2026-04-21
2026-04-21 14:36:52 +02:00

65 lines
2.9 KiB
SQL

-- Migration 003: Catalogs (Skills & Training Methods)
-- Erstellt: 2026-04-21
-- Beschreibung: Fähigkeiten- und Methodenkataloge
-- Skills (Fähigkeiten) - global
CREATE TABLE skills (
id SERIAL PRIMARY KEY,
name VARCHAR(200) NOT NULL,
category VARCHAR(100), -- kihon, kumite, kata, selbstverteidigung, fitness
description TEXT,
importance INT CHECK (importance BETWEEN 1 AND 5),
keywords JSONB,
status VARCHAR(50) DEFAULT 'active',
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);
CREATE INDEX idx_skills_category ON skills(category);
CREATE INDEX idx_skills_status ON skills(status);
-- Training Methods (Trainingsmethoden) - global
CREATE TABLE training_methods (
id SERIAL PRIMARY KEY,
name VARCHAR(200) NOT NULL,
abbreviation VARCHAR(20),
category VARCHAR(100), -- intervall, rollenspiel, zirkel, koordination, etc.
description TEXT,
typical_duration INT, -- in Minuten
typical_group_size VARCHAR(50),
related_skills JSONB, -- [skill_id, skill_id, ...]
keywords JSONB,
status VARCHAR(50) DEFAULT 'active',
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);
CREATE INDEX idx_methods_category ON training_methods(category);
CREATE INDEX idx_methods_status ON training_methods(status);
-- Insert Basis-Skills (Beispiele)
INSERT INTO skills (name, category, description, importance) VALUES
('Dachi Waza', 'kihon', 'Standtechniken und Körperhaltung', 5),
('Tsuki Waza', 'kihon', 'Fausttechniken', 5),
('Keri Waza', 'kihon', 'Fußtechniken', 5),
('Uke Waza', 'kihon', 'Abwehrtechniken', 5),
('Distanzkontrolle', 'kumite', 'Kontrolle der Kampfdistanz', 4),
('Beinarbeit', 'kumite', 'Fußarbeit und Bewegung', 4),
('Reaktionsfähigkeit', 'kumite', 'Schnelle Reaktion auf Angriffe', 4),
('Aufmerksamkeit', 'selbstverteidigung', 'Gefahrenbewusstsein und Aufmerksamkeit', 5),
('Selbstbehauptung', 'selbstverteidigung', 'Selbstsicheres Auftreten', 5),
('Ausdauer', 'fitness', 'Kardiovaskuläre Ausdauer', 3),
('Kraft', 'fitness', 'Muskelkraft', 3),
('Flexibilität', 'fitness', 'Beweglichkeit', 3);
-- Insert Basis-Methods (Beispiele)
INSERT INTO training_methods (name, abbreviation, category, description, typical_duration) VALUES
('Intervalltraining', 'INT', 'kondition', 'Wechsel zwischen Belastung und Erholung', 20),
('Zirkeltraining', 'ZIR', 'kondition', 'Mehrere Stationen mit verschiedenen Übungen', 30),
('Rollenspiel', 'ROL', 'didaktik', 'Szenario-basiertes Training', 15),
('Strukturierte Übung', 'STR', 'didaktik', 'Schrittweise Anleitung einer Technik', 10),
('Partnerübung', 'PAR', 'didaktik', 'Training zu zweit', 15),
('Koordinationstraining', 'KOO', 'koordination', 'Schulung von Koordination und Balance', 15),
('Dauermethode', 'DAU', 'kondition', 'Kontinuierliche Belastung ohne Pausen', 20),
('Plyometrisches Training', 'PLY', 'kraft', 'Explosivkraft durch Sprungübungen', 15);