feat(fixtures): ajouter système de fixtures pour les données
- fixtures/data.sql: dump des données actuelles de la base - fixtures/load.sh: script shell de chargement - makefile: targets fixtures-dump, fixtures-load, fixtures-reset Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
1042
fixtures/data.sql
Normal file
1042
fixtures/data.sql
Normal file
File diff suppressed because one or more lines are too long
42
fixtures/load.sh
Executable file
42
fixtures/load.sh
Executable file
@@ -0,0 +1,42 @@
|
||||
#!/bin/bash
|
||||
# Load fixtures into the database
|
||||
# Usage: ./fixtures/load.sh [--reset]
|
||||
|
||||
set -e
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
|
||||
|
||||
# Load environment variables
|
||||
if [ -f "$PROJECT_DIR/.env" ]; then
|
||||
export $(grep -v '^#' "$PROJECT_DIR/.env" | xargs)
|
||||
fi
|
||||
|
||||
DB_USER="${POSTGRES_USER:-root}"
|
||||
DB_NAME="${POSTGRES_DB:-inventory}"
|
||||
CONTAINER="${DB_CONTAINER:-inventory-db-1}"
|
||||
|
||||
echo "Loading fixtures into $DB_NAME..."
|
||||
|
||||
# Check if --reset flag is passed
|
||||
if [ "$1" == "--reset" ]; then
|
||||
echo "Resetting database (truncating all tables)..."
|
||||
docker exec -i "$CONTAINER" psql -U "$DB_USER" -d "$DB_NAME" -c "
|
||||
DO \$\$ DECLARE
|
||||
r RECORD;
|
||||
BEGIN
|
||||
FOR r IN (SELECT tablename FROM pg_tables WHERE schemaname = 'public' AND tablename != 'doctrine_migration_versions') LOOP
|
||||
EXECUTE 'TRUNCATE TABLE ' || quote_ident(r.tablename) || ' CASCADE';
|
||||
END LOOP;
|
||||
END \$\$;
|
||||
"
|
||||
fi
|
||||
|
||||
# Load fixtures with foreign key checks disabled
|
||||
docker exec -i "$CONTAINER" psql -U "$DB_USER" -d "$DB_NAME" <<EOF
|
||||
SET session_replication_role = replica;
|
||||
$(cat "$SCRIPT_DIR/data.sql")
|
||||
SET session_replication_role = DEFAULT;
|
||||
EOF
|
||||
|
||||
echo "Fixtures loaded successfully!"
|
||||
18
makefile
18
makefile
@@ -126,3 +126,21 @@ import-data:
|
||||
$(DOCKER_COMPOSE) exec -T db psql -U $(POSTGRES_USER) -d $(POSTGRES_DB) -v ON_ERROR_STOP=1 -c "SET session_replication_role = replica;"
|
||||
$(DOCKER_COMPOSE) exec -T db psql -U $(POSTGRES_USER) -d $(POSTGRES_DB) -v ON_ERROR_STOP=1 < $(DATA_SQL_NORM)
|
||||
$(DOCKER_COMPOSE) exec -T db psql -U $(POSTGRES_USER) -d $(POSTGRES_DB) -v ON_ERROR_STOP=1 -c "SET session_replication_role = DEFAULT;"
|
||||
|
||||
# Fixtures management
|
||||
fixtures-dump:
|
||||
@echo "Dumping current database to fixtures/data.sql..."
|
||||
$(DOCKER_COMPOSE) exec -T db pg_dump -U $(POSTGRES_USER) -d $(POSTGRES_DB) --data-only --inserts --no-owner --no-privileges | grep -v "^pg_dump:" | grep -v "^\\\\restrict" > fixtures/data.sql
|
||||
@echo "Fixtures saved to fixtures/data.sql ($(shell wc -l < fixtures/data.sql) lines)"
|
||||
|
||||
fixtures-load:
|
||||
@echo "Loading fixtures from fixtures/data.sql..."
|
||||
$(DOCKER_COMPOSE) exec -T db psql -U $(POSTGRES_USER) -d $(POSTGRES_DB) -c "SET session_replication_role = replica;"
|
||||
$(DOCKER_COMPOSE) exec -T db psql -U $(POSTGRES_USER) -d $(POSTGRES_DB) < fixtures/data.sql
|
||||
$(DOCKER_COMPOSE) exec -T db psql -U $(POSTGRES_USER) -d $(POSTGRES_DB) -c "SET session_replication_role = DEFAULT;"
|
||||
@echo "Fixtures loaded successfully!"
|
||||
|
||||
fixtures-reset:
|
||||
@echo "Resetting database and loading fixtures..."
|
||||
$(DOCKER_COMPOSE) exec -T db psql -U $(POSTGRES_USER) -d $(POSTGRES_DB) -c "DO \$$\$$ DECLARE r RECORD; BEGIN FOR r IN (SELECT tablename FROM pg_tables WHERE schemaname = 'public' AND tablename != 'doctrine_migration_versions') LOOP EXECUTE 'TRUNCATE TABLE ' || quote_ident(r.tablename) || ' CASCADE'; END LOOP; END \$$\$$;"
|
||||
$(MAKE) fixtures-load
|
||||
|
||||
Reference in New Issue
Block a user