doctrine:
    dbal:
        url: '%env(resolve:DATABASE_URL)%'
        profiling_collect_backtrace: '%kernel.debug%'
        use_savepoints: true
    orm:
        auto_generate_proxy_classes: true
        enable_lazy_ghost_objects: true
        report_fields_where_declared: true
        naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
        auto_mapping: true
        mappings:
            App:
                type: attribute
                is_bundle: false
                dir: '%kernel.project_dir%/src'
                prefix: 'App'
                alias: App
        controller_resolver:
            auto_mapping: false
        dql:
            string_functions:
                JSON_CONTAINS: App\Shared\Doctrine\JsonContains
                JSON_EXTRACT: App\Shared\Doctrine\JsonExtract
        filters:
            # پیش‌فرض خاموش: TenantFilterSubscriber فقط وقتی روشنش می‌کند که محیط
            # کاربر پنل حل شده باشد. روشن‌بودن سراسری، مسیرهای عمومی مارکت‌پلیس و
            # کامندهای کنسول را — که کاربر ندارند — می‌شکند.
            tenant:
                class: App\Shared\Tenant\TenantFilter
                enabled: false

when@test:
    doctrine:
        dbal:
            dbname_suffix: '_test%env(default::TEST_TOKEN)%'
            # APP_DEBUG=0 در .env پروژه است، پس profiling که پیش‌فرضش %kernel.debug%
            # است خاموش می‌ماند و سرویس doctrine.debug_data_holder ساخته نمی‌شود.
            # تست‌های N+1 برای شمارش کوئری به آن نیاز دارند.
            profiling: true

when@prod:
    doctrine:
        orm:
            auto_generate_proxy_classes: false
            proxy_dir: '%kernel.build_dir%/doctrine/orm/Proxies'
            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
