feat: Persister les utilisateurs en PostgreSQL avec cache-aside Redis
Les utilisateurs étaient stockés uniquement dans Redis (CacheUserRepository), ce qui exposait à une perte totale des comptes en cas de restart Redis, FLUSHDB ou perte du volume Docker. Les tables student_guardians et teacher_assignments référençaient des user IDs sans FK réelle. PostgreSQL devient la source de vérité via DoctrineUserRepository (DBAL, upsert ON CONFLICT). CachedUserRepository décore l'interface existante avec le pattern cache-aside : lectures Redis d'abord → miss → PostgreSQL → populate Redis ; écritures PostgreSQL d'abord → mise à jour Redis. Si Redis est indisponible, l'application continue via PostgreSQL seul. Une commande de migration (app:migrate-users-to-postgres) permet de copier les données Redis existantes vers PostgreSQL de manière idempotente.
This commit is contained in:
@@ -67,8 +67,17 @@ services:
|
||||
App\Administration\Domain\Repository\ActivationTokenRepository:
|
||||
alias: App\Administration\Infrastructure\Persistence\Redis\RedisActivationTokenRepository
|
||||
|
||||
App\Administration\Infrastructure\Persistence\Cache\CachedUserRepository:
|
||||
arguments:
|
||||
$inner: '@App\Administration\Infrastructure\Persistence\Doctrine\DoctrineUserRepository'
|
||||
|
||||
App\Administration\Domain\Repository\UserRepository:
|
||||
alias: App\Administration\Infrastructure\Persistence\Cache\CacheUserRepository
|
||||
alias: App\Administration\Infrastructure\Persistence\Cache\CachedUserRepository
|
||||
|
||||
App\Administration\Infrastructure\Console\MigrateUsersToPostgresCommand:
|
||||
arguments:
|
||||
$source: '@App\Administration\Infrastructure\Persistence\Cache\CacheUserRepository'
|
||||
$target: '@App\Administration\Infrastructure\Persistence\Doctrine\DoctrineUserRepository'
|
||||
|
||||
App\Administration\Application\Port\PasswordHasher:
|
||||
alias: App\Administration\Infrastructure\Security\SymfonyPasswordHasher
|
||||
|
||||
Reference in New Issue
Block a user