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

102 lines
3.1 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
set -euo pipefail
# Usage: ./create_match_with_teams.sh [TOURNAMENT_ID] [TEAM_A_NAME] [TEAM_B_NAME]
TID="${1:-1}"
TEAM_A="${2:-Team Alpha}"
TEAM_B="${3:-Team Beta}"
DB_SVC="${DB_SVC:-db}"
DB_NAME="${DB_NAME:-supersunday}"
DB_USER="${DB_USER:-postgres}"
say(){ printf "\033[1;36m%s\033[0m\n" "$*"; }
err(){ printf "\033[1;31m%s\033[0m\n" "$*" >&2; }
say "▶ Vérifie que la DB tourne"
docker compose up -d "${DB_SVC}" >/dev/null
say "▶ Sassure que teams a (id, name, tournament_id)"
docker compose exec -T "${DB_SVC}" sh -lc "cat > /tmp/ensure_teams_shape.sql" <<'SQL'
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name='teams') THEN
CREATE TABLE teams (id SERIAL PRIMARY KEY);
END IF;
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;
UPDATE teams SET name = COALESCE(name, 'Team '||id);
END IF;
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;
END IF;
END $$;
SQL
docker compose exec -T "${DB_SVC}" sh -lc "psql -U ${DB_USER} -d ${DB_NAME} -f /tmp/ensure_teams_shape.sql"
say "▶ Upsert des équipes '${TEAM_A}' et '${TEAM_B}' pour le tournoi ${TID}"
docker compose exec -T "${DB_SVC}" sh -lc "cat > /tmp/upsert_teams.sql" <<'SQL'
\set team_a :'TEAM_A'
\set team_b :'TEAM_B'
\set tid :TID
WITH
sel_a AS (
SELECT id FROM teams
WHERE name = :'team_a' AND (tournament_id = :tid OR tournament_id IS NULL)
ORDER BY id LIMIT 1
),
ins_a AS (
INSERT INTO teams (name, tournament_id)
SELECT :'team_a', :tid
WHERE NOT EXISTS (SELECT 1 FROM sel_a)
RETURNING id
),
a AS (
SELECT COALESCE((SELECT id FROM sel_a),(SELECT id FROM ins_a)) AS id
),
sel_b AS (
SELECT id FROM teams
WHERE name = :'team_b' AND (tournament_id = :tid OR tournament_id IS NULL)
ORDER BY id LIMIT 1
),
ins_b AS (
INSERT INTO teams (name, tournament_id)
SELECT :'team_b', :tid
WHERE NOT EXISTS (SELECT 1 FROM sel_b)
RETURNING id
),
b AS (
SELECT COALESCE((SELECT id FROM sel_b),(SELECT id FROM ins_b)) AS id
)
SELECT a.id AS team_a_id, b.id AS team_b_id FROM a, b;
SQL
IDS=$(
docker compose exec -T "${DB_SVC}" sh -lc \
"psql -U ${DB_USER} -d ${DB_NAME} -t -A -F',' \
-v TEAM_A=\"${TEAM_A}\" -v TEAM_B=\"${TEAM_B}\" -v TID=${TID} \
-f /tmp/upsert_teams.sql"
)
TEAM_A_ID="${IDS%%,*}"
TEAM_B_ID="${IDS##*,}"
if [[ -z "${TEAM_A_ID}" || -z "${TEAM_B_ID}" ]]; then
err "❌ Impossible de déterminer les IDs d'équipes. Résultat: '${IDS}'"
exit 1
fi
say "✅ Teams: ${TEAM_A} -> ${TEAM_A_ID}, ${TEAM_B} -> ${TEAM_B_ID}"
say "▶ Création du match via API"
JSON_PAYLOAD=$(printf '{"tournament_id":%s,"team_a_id":%s,"team_b_id":%s,"court":"Court 1"}' "$TID" "$TEAM_A_ID" "$TEAM_B_ID")
curl -s -X POST http://localhost/api/matches \
-H "Content-Type: application/json" \
--data-raw "${JSON_PAYLOAD}"
echo
say "▶ Matches du tournoi ${TID}"
curl -s "http://localhost/api/tournaments/${TID}/matches"
echo