Blocker - Frontend attendait `hydra:member` / `hydra:totalItems` / `hydra:view` mais API Platform 4 sert `member` / `totalItems` / `view` (sans prefixe) sous ld+json, et un tableau plat sous json. Consequence : tableau admin et timeline silencieusement vides. Fix : `useAuditLog` force `Accept: application/ld+json` (necessaire pour obtenir l'objet Hydra avec pagination), types `HydraCollection`/`HydraView` renommes, composants accedent aux proprietes sans prefixe. Nouveau test fonctionnel verrouille le format. Should-fix - `AuditLogWriter` : ajout de `'id' => Types::GUID` pour expliciter le type natif PG `uuid` (fonctionnait par cast implicite mais l'intention etait floue). - `AuditListener` docblock : documente que le DQL bulk DELETE/UPDATE et `Connection::executeStatement()` bypassent le listener (onFlush non appele). Piege pour les futures commandes de purge. - `AuditLogResource` : ajout d'une regex UUID dans `requirements` de l'operation Get — un `GET /api/audit-logs/not-a-uuid` produisait un 500 (cast PG rejete) au lieu d'un 404. - `audit-log.vue` : le watcher des filtres faisait `filters.page = 1` ce qui declenchait le watcher de `page`, causant deux `loadEntries()` en parallele. Fusionne : la navigation page appelle `loadEntries()` directement depuis `goPrevious`/`goNext`, plus de watcher dedie. - `useAuditLog.fetchEntityLogs` : bypass du cache `lastCollection` pour ne pas polluer la reference page-level quand la timeline est ouverte. - `AuditTimeline.vue` : remplacement du `<div v-if="!canView"/>` vide par un `v-if` sur le wrapper — aucun DOM quand l'utilisateur n'a pas le droit. - `AuditListenerTest` tag : retire le `_` (wildcard LIKE SQL) du prefix pour eviter un faux negatif de match cross-test. - `AuditLogApiTest` : proprietes `auditConnection` / `runTag` nullable et tearDown guarde, sinon un echec setUp provoquait un fatal typed-property au lieu de propager l'exception d'origine. Stabilite suite de tests - `doctrine.yaml when@test` : `idle_connection_ttl: 1` sur les deux connexions pour eviter l'accumulation de connexions orphelines. - tearDown des tests audit : `close()` explicite sur la connexion audit apres chaque test. - `docker-compose.yml` : `max_connections=300` sur la DB dev (defaut PG=100 insuffisant pour 220+ tests * 2 connexions/test).
64 lines
2.2 KiB
YAML
64 lines
2.2 KiB
YAML
services:
|
|
php:
|
|
container_name: php-${DOCKER_APP_NAME}-fpm
|
|
build:
|
|
context: ./infra/dev
|
|
dockerfile: Dockerfile
|
|
args:
|
|
DOCKER_PHP_VERSION: ${DOCKER_PHP_VERSION}
|
|
DOCKER_NODE_VERSION: ${DOCKER_NODE_VERSION}
|
|
CURRENT_UID: ${CURRENT_UID}
|
|
CURRENT_GID: ${CURRENT_GID}
|
|
environment:
|
|
PHP_IDE_CONFIG: serverName=${DOCKER_APP_NAME}-docker
|
|
XDEBUG_CLIENT_HOST: ${XDEBUG_CLIENT_HOST:-host.docker.internal}
|
|
XDEBUG_CONFIG: client_host=${XDEBUG_CLIENT_HOST:-host.docker.internal} client_port=9003
|
|
DATABASE_URL: "postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:${POSTGRES_PORT}/${POSTGRES_DB}?serverVersion=16&charset=utf8"
|
|
COMPOSER_HOME: /tmp/composer
|
|
COMPOSER_CACHE_DIR: /tmp/composer/cache
|
|
volumes:
|
|
- ./:/var/www/html
|
|
- ~/.cache:/var/www/.cache
|
|
- ~/.config:/var/www/.config
|
|
- ~/.composer:/var/www/.composer
|
|
- ./infra/dev/php.ini:/usr/local/etc/php/php.ini
|
|
- ./infra/dev/xdebug.ini:/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
|
|
- ./LOG:/var/www/html/LOG
|
|
- uploads_data:/var/www/html/var/uploads
|
|
extra_hosts:
|
|
- "host.docker.internal:host-gateway"
|
|
depends_on:
|
|
- db
|
|
ports:
|
|
- "3004:3004"
|
|
restart: unless-stopped
|
|
nginx:
|
|
image: nginx:1.27-alpine
|
|
container_name: nginx-${DOCKER_APP_NAME}
|
|
depends_on:
|
|
- php
|
|
ports:
|
|
- "8083:80"
|
|
volumes:
|
|
- ./:/var/www/html:ro
|
|
- ./infra/dev/nginx.conf:/etc/nginx/conf.d/coltura.conf:ro
|
|
restart: unless-stopped
|
|
db:
|
|
image: postgres:16-alpine
|
|
# max_connections eleve (defaut PG=100) pour absorber la suite de tests :
|
|
# ~220 tests * kernel reboot par test * 2 connexions (default + audit)
|
|
# peut saturer le pool, meme avec idle_connection_ttl court cote Doctrine.
|
|
command: -p ${POSTGRES_PORT:-5436} -c max_connections=300
|
|
environment:
|
|
POSTGRES_DB: ${POSTGRES_DB}
|
|
POSTGRES_USER: ${POSTGRES_USER}
|
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
|
volumes:
|
|
- pg_data:/var/lib/postgresql/data
|
|
ports:
|
|
- "${POSTGRES_PORT:-5436}:${POSTGRES_PORT:-5436}"
|
|
restart: unless-stopped
|
|
volumes:
|
|
pg_data:
|
|
uploads_data:
|