mirror of
https://github.com/R0m1k3/LogiFlow.git
synced 2026-10-16 19:56:32 +02:00
- Serveur Rust (server-rs/, axum + sqlx) : les 148 adresses de l'API, l'interface, les migrations de démarrage et les tâches de fond ; même comportement que Node (banc : 2027 cas, 0 écart hors écarts déclarés USERS-02, RAPPRO-21, R4, R5). - Node retiré : server/, dépendances serveur, image Docker sans Node (51 Mo), docker-compose à un seul service applicatif. - R4 : écritures d'un autre site refusées (Sec-Fetch-Site / Origin). - R5 : « aujourd'hui » et sauvegarde automatique à l'heure de Paris. - R6 : mainteneur dans .github/CODEOWNERS. - Menu latéral : Accueil puis Calendrier en tête. - Plan et état : docs/PLAN-MIGRATION-RUST.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ke2qyS8rgacP3ap5iezDbM
45 lines
2.5 KiB
Bash
Executable File
45 lines
2.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Prépare la base modèle du banc (bench_seed) : schéma de production, index créés
|
|
# par le premier démarrage du Node de référence, puis données du banc (seed.ts).
|
|
# Prérequis : PostgreSQL local, serveur Node de référence construit (reference-node.sh).
|
|
# Usage : scripts/bench/setup.sh [postgres://utilisateur:motdepasse@hôte:port]
|
|
set -euo pipefail
|
|
root="$(cd "$(dirname "$0")/../.." && pwd)"
|
|
pg="${1:-${BENCH_PG_URL:-postgres://logiflow_admin:bench@localhost:5432}}"
|
|
# Mêmes noms que config.ts : BENCH_ID sépare les bases, BENCH_PORT_BASE les ports
|
|
suffix="${BENCH_ID:+_$BENCH_ID}"
|
|
template="${BENCH_TEMPLATE_DB:-bench_seed$suffix}"
|
|
schema_db="logiflow_schema$suffix"
|
|
port=$(( ${BENCH_PORT_BASE:-3200} + 92 ))
|
|
node_dir="${BENCH_NODE_DIR:-$root/.bench-reference}"
|
|
|
|
psql -q "$pg/postgres" -c "DROP DATABASE IF EXISTS $schema_db WITH (FORCE)" -c "CREATE DATABASE $schema_db"
|
|
"$root/scripts/bench/schema.sh" "$pg/$schema_db" 2>&1 | grep -v NOTICE || true
|
|
|
|
# Premier démarrage du Node de référence : migrations de son server/migrations.production.ts
|
|
# exec : $! est bien le processus Node, pas un sous-shell
|
|
(cd "$node_dir" && exec env NODE_ENV=production PORT=$port DATABASE_URL="$pg/$schema_db" SESSION_SECRET=setup \
|
|
node dist/index.js > /dev/null 2>&1) &
|
|
node_pid=$!
|
|
trap 'kill $node_pid 2>/dev/null || true' EXIT
|
|
for _ in $(seq 1 120); do
|
|
curl -sf "http://127.0.0.1:$port/api/health" > /dev/null && break
|
|
sleep 0.5
|
|
done
|
|
# Les index sont créés en arrière-plan : attendre la fin des CREATE INDEX
|
|
sleep 2
|
|
while [ "$(psql -At "$pg/$schema_db" -c "SELECT count(*) FROM pg_stat_activity WHERE query ILIKE 'CREATE INDEX%' OR query ILIKE 'ANALYZE%'")" != "0" ]; do
|
|
sleep 1
|
|
done
|
|
kill $node_pid 2>/dev/null || true; wait $node_pid 2>/dev/null || true
|
|
trap - EXIT
|
|
|
|
# Le modèle ne garde que le schéma : Node a pu créer l'administrateur par défaut
|
|
tables=$(psql -At "$pg/$schema_db" -c "SELECT string_agg(format('%I', tablename), ', ') FROM pg_tables WHERE schemaname = 'public'")
|
|
psql -q "$pg/$schema_db" -c "TRUNCATE $tables RESTART IDENTITY CASCADE"
|
|
|
|
psql -q "$pg/postgres" -c "DROP DATABASE IF EXISTS $template WITH (FORCE)" -c "CREATE DATABASE $template TEMPLATE $schema_db"
|
|
(cd "$root" && DATABASE_URL="$pg/$template" SESSION_SECRET=banc-secret-de-session ENCRYPTION_KEY=banc-cle-de-chiffrement \
|
|
npx tsx scripts/bench/seed.ts)
|
|
echo "Base modèle $template prête ($(psql -At "$pg/$template" -c "SELECT count(*) FROM pg_indexes WHERE schemaname = 'public'") index)."
|