Files
SuperSunday/fix_and_seed_teams.sh
2025-08-25 12:39:54 +00:00

106 lines
3.5 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
say(){ printf "\033[1;36m%s\033[0m\n" "$*"; }
err(){ printf "\033[1;31m%s\033[0m\n" "$*" >&2; }
DB_SVC="${DB_SVC:-db}"
DB_NAME="${DB_NAME:-supersunday}"
DB_USER="${DB_USER:-postgres}"
WAIT_SECS="${WAIT_SECS:-60}"
say "▶ Démarrage/validation du service DB: ${DB_SVC}"
docker compose up -d "${DB_SVC}" >/dev/null
say "▶ Attente que Postgres réponde (pg_isready)"
start=$(date +%s)
while true; do
if docker compose exec -T "${DB_SVC}" sh -lc 'command -v pg_isready >/dev/null 2>&1 && pg_isready -U '"${DB_USER}"' -d '"${DB_NAME}"' -h 127.0.0.1 -p 5432 >/dev/null 2>&1'; then
break
fi
[ $(( $(date +%s) - start )) -ge "${WAIT_SECS}" ] && { err "❌ Postgres ne répond pas"; exit 1; }
sleep 2
done
say "✅ Postgres prêt."
say "▶ Migration de la table teams (ajout name/tournament_id si absents, mapping depuis colonnes existantes)"
docker compose exec -T "${DB_SVC}" sh -lc "cat > /tmp/fix_teams.sql" <<'SQL'
-- Crée la table si absente (structure minimale)
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name='teams') THEN
CREATE TABLE teams (
id SERIAL PRIMARY KEY
-- on ajoutera name et tournament_id dans le bloc suivant
);
END IF;
END $$;
-- Ajoute la colonne name si absente
DO $$
DECLARE
src_col text;
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name='teams' AND column_name='name'
) THEN
ALTER TABLE teams ADD COLUMN name TEXT;
-- Cherche une colonne plausible pour peupler name
SELECT c.column_name INTO src_col
FROM information_schema.columns c
WHERE c.table_name='teams'
AND c.column_name IN ('team_name','title','label','nom','libelle')
ORDER BY c.column_name
LIMIT 1;
IF src_col IS NOT NULL THEN
EXECUTE format('UPDATE teams SET name = %I WHERE name IS NULL', src_col);
END IF;
-- S'assure que name n'est pas NULL sur les lignes existantes
UPDATE teams SET name = COALESCE(name, 'Team '||id);
END IF;
END $$;
-- Ajoute tournament_id si absent (référence tournaments(id) si possible)
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name='teams' AND column_name='tournament_id'
) THEN
ALTER TABLE teams ADD COLUMN tournament_id INT NULL;
-- Ajoute une FK si la table tournaments existe
IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name='tournaments') THEN
BEGIN
ALTER TABLE teams
ADD CONSTRAINT IF NOT EXISTS teams_tournament_fk
FOREIGN KEY (tournament_id) REFERENCES tournaments(id) ON DELETE CASCADE;
EXCEPTION WHEN duplicate_object THEN
-- ignore
NULL;
END;
END IF;
END IF;
END $$;
-- Insère Alpha/Beta seulement s'ils n'existent pas déjà par le nom
WITH have_alpha AS (
SELECT 1 FROM teams WHERE name ILIKE 'team alpha' LIMIT 1
), have_beta AS (
SELECT 1 FROM teams WHERE name ILIKE 'team beta' LIMIT 1
)
INSERT INTO teams (name, tournament_id)
SELECT v.name, v.tid
FROM (VALUES ('Team Alpha', 1), ('Team Beta', 1)) AS v(name, tid)
WHERE (v.name='Team Alpha' AND NOT EXISTS (SELECT 1 FROM have_alpha))
OR (v.name='Team Beta' AND NOT EXISTS (SELECT 1 FROM have_beta));
SQL
docker compose exec -T "${DB_SVC}" sh -lc "psql -U ${DB_USER} -d ${DB_NAME} -f /tmp/fix_teams.sql"
say "▶ Aperçu teams (id, name, tournament_id):"
docker compose exec -T "${DB_SVC}" sh -lc "psql -U ${DB_USER} -d ${DB_NAME} -c \"SELECT id, name, tournament_id FROM teams ORDER BY id LIMIT 20;\""
say "✅ Migration/seed teams terminé."