Premiere verison route admin operationnelle

This commit is contained in:
karim hassan
2025-08-25 12:39:54 +00:00
parent eabd0aa50f
commit 38ea5c7da0
21 changed files with 692 additions and 53 deletions

102
create_match_with_teams.sh Executable file
View 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 "▶ 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