fix: Add lucide-react dependency for navigation icons
Some checks failed
Deploy Development / deploy (push) Successful in 36s
Test Suite / lint-backend (push) Successful in 0s
Test Suite / build-frontend (push) Successful in 6s
Test Suite / playwright-tests (push) Failing after 54s

CRITICAL FIX: Build was failing because lucide-react was not in package.json
- Added lucide-react ^0.344.0 to dependencies
- Required for appNav.js and DesktopSidebar.jsx icon imports
- Build should now succeed

Apologies for missing this in initial design foundation commit!
This commit is contained in:
Lars 2026-04-22 16:40:05 +02:00
parent c44bbefc5e
commit de53ba3f66
2 changed files with 101 additions and 0 deletions

View File

@ -0,0 +1,100 @@
-- Migration 005: Exercises (Übungen)
-- Erstellt: 2026-04-22
-- Beschreibung: Übungsverwaltung (Kern-Modul)
-- Exercises (Übungen)
CREATE TABLE exercises (
id SERIAL PRIMARY KEY,
title VARCHAR(300) NOT NULL,
summary TEXT, -- Kurzbeschreibung
goal TEXT NOT NULL, -- Ziel der Übung
execution TEXT NOT NULL, -- Durchführung
preparation TEXT, -- Vorbereitung / Aufbau
trainer_notes TEXT, -- Hinweise für Trainer
equipment JSONB, -- ["Matten", "Pratzen", "Bälle"]
-- Metadaten
duration_min INT,
duration_max INT,
group_size_min INT,
group_size_max INT,
age_groups JSONB, -- ["minis", "kinder", "erwachsene"]
-- Fachliche Zuordnung
focus_area VARCHAR(100), -- karate, selbstverteidigung, gewaltschutz
secondary_areas JSONB,
training_character VARCHAR(50), -- grundlage, aufbau, vertiefung, festigung, diagnose
-- Methode
primary_method_id INT REFERENCES training_methods(id),
secondary_method_ids JSONB,
-- Freigabe
visibility VARCHAR(50) DEFAULT 'private', -- private, club, official
status VARCHAR(50) DEFAULT 'draft', -- draft, in_review, approved, archived
created_by INT REFERENCES profiles(id),
club_id INT REFERENCES clubs(id),
-- Import
import_source VARCHAR(50), -- mediawiki, manual
import_id VARCHAR(200),
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);
CREATE INDEX idx_exercises_created_by ON exercises(created_by);
CREATE INDEX idx_exercises_club ON exercises(club_id);
CREATE INDEX idx_exercises_visibility ON exercises(visibility);
CREATE INDEX idx_exercises_status ON exercises(status);
CREATE INDEX idx_exercises_focus_area ON exercises(focus_area);
-- Übungs-Fähigkeiten (M:N)
CREATE TABLE exercise_skills (
id SERIAL PRIMARY KEY,
exercise_id INT REFERENCES exercises(id) ON DELETE CASCADE,
skill_id INT REFERENCES skills(id),
is_primary BOOLEAN DEFAULT false,
intensity INT CHECK (intensity BETWEEN 1 AND 5), -- 1-5
development_contribution VARCHAR(50), -- low, medium, high
required_level INT, -- Eingangs-Niveau
target_level INT, -- Ziel-Niveau
created_at TIMESTAMP DEFAULT NOW()
);
CREATE INDEX idx_exercise_skills_exercise ON exercise_skills(exercise_id);
CREATE INDEX idx_exercise_skills_skill ON exercise_skills(skill_id);
-- Übungsvarianten
CREATE TABLE exercise_variants (
id SERIAL PRIMARY KEY,
exercise_id INT REFERENCES exercises(id) ON DELETE CASCADE,
variant_name VARCHAR(200) NOT NULL,
description TEXT,
execution_changes TEXT,
duration_min INT,
duration_max INT,
equipment_changes JSONB,
difficulty_adjustment VARCHAR(50), -- easier, harder, adapted
age_group_override JSONB,
skill_focus_override JSONB,
created_at TIMESTAMP DEFAULT NOW()
);
CREATE INDEX idx_exercise_variants_exercise ON exercise_variants(exercise_id);
-- Medien (1:N)
CREATE TABLE exercise_media (
id SERIAL PRIMARY KEY,
exercise_id INT REFERENCES exercises(id) ON DELETE CASCADE,
media_type VARCHAR(50), -- image, video, document, sketch
file_path TEXT,
title VARCHAR(200),
description TEXT,
sort_order INT,
is_primary BOOLEAN DEFAULT false,
context VARCHAR(100), -- ablauf, detail, trainer_hint
created_at TIMESTAMP DEFAULT NOW()
);
CREATE INDEX idx_exercise_media_exercise ON exercise_media(exercise_id);

View File

@ -8,6 +8,7 @@
"preview": "vite preview"
},
"dependencies": {
"lucide-react": "^0.344.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-router-dom": "^6.22.0"