Premiere verison route admin operationnelle
This commit is contained in:
102
create_match_with_teams.sh
Executable file
102
create_match_with_teams.sh
Executable file
@@ -0,0 +1,102 @@
|
||||
#!/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 "▶ S’assure 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
|
||||
Reference in New Issue
Block a user