106 lines
3.5 KiB
Bash
Executable File
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é." |