doctrine:
    dbal:
        default_connection: default
        connections:
            # ORM uses `default`; AuditLogWriter uses `audit` (same DSN, separate
            # service) to write outside the ORM transaction so audit rows survive
            # an application-side rollback and avoid transactional entanglement.
            default:
                url: '%env(resolve:DATABASE_URL)%'
                profiling_collect_backtrace: '%kernel.debug%'
                # audit_log has no ORM entity (written via raw DBAL). Exclude it
                # from schema comparison so migrations:diff / schema:validate stay
                # clean. Creation/teardown stay driven by migrations.
                schema_filter: '~^(?!audit_log$).+~'
            audit:
                url: '%env(resolve:DATABASE_URL)%'
    orm:
        validate_xml_mapping: true
        naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
        identity_generation_preferences:
            Doctrine\DBAL\Platforms\PostgreSQLPlatform: identity
        auto_mapping: true
        resolve_target_entities:
            App\Shared\Domain\Contract\UserInterface: App\Module\Core\Domain\Entity\User
        mappings:
            App:
                type: attribute
                is_bundle: false
                dir: '%kernel.project_dir%/src/Entity'
                prefix: 'App\Entity'
                alias: App
            Core:
                type: attribute
                is_bundle: false
                dir: '%kernel.project_dir%/src/Module/Core/Domain/Entity'
                prefix: 'App\Module\Core\Domain\Entity'
        controller_resolver:
            auto_mapping: false

when@test:
    doctrine:
        dbal:
            # Propagate the _test suffix to BOTH connections: the audit
            # connection must write to the test DB, not the dev DB.
            connections:
                default:
                    dbname_suffix: '_test%env(default::TEST_TOKEN)%'
                audit:
                    dbname_suffix: '_test%env(default::TEST_TOKEN)%'

when@prod:
    doctrine:
        orm:
            query_cache_driver:
                type: pool
                pool: doctrine.system_cache_pool
            result_cache_driver:
                type: pool
                pool: doctrine.result_cache_pool

    framework:
        cache:
            pools:
                doctrine.result_cache_pool:
                    adapter: cache.app
                doctrine.system_cache_pool:
                    adapter: cache.system
