"""Ensure every ORM model module is loaded onto the shared ``Base.metadata``.

The FastAPI app usually pulls in most models via routers. The arq worker imports task modules
directly; if ``Project`` (or similar) loads before ``users`` is registered, SQLAlchemy can raise
``NoReferencedTableError`` when resolving foreign keys such as ``projects.created_by`` →
``users.id``.

Call :func:`import_all_orm_models` once at process startup for any entrypoint that uses the ORM
without loading the full API import graph.
"""


def import_all_orm_models() -> None:
    """Import all domain ``models`` modules (registers tables; safe to call multiple times).

    Order respects obvious FK bases (e.g. ``workspaces`` before ``billing`` / ``api_keys``).
    Remaining cross-domain cycles are resolved once every table is registered.
    """
    import src.domain.auth.models  # noqa: F401
    import src.domain.workspaces.models  # noqa: F401
    import src.domain.admin.models  # noqa: F401
    import src.domain.billing.models  # noqa: F401
    import src.domain.public.models  # noqa: F401
    import src.domain.runtime_ai.models  # noqa: F401
    import src.domain.cloud_credits.models  # noqa: F401
    import src.domain.api_keys.models  # noqa: F401
    import src.domain.projects.models  # noqa: F401
    import src.domain.revisions.models  # noqa: F401
    import src.domain.instructions.models  # noqa: F401
    import src.domain.previews.models  # noqa: F401
    import src.domain.devices.models  # noqa: F401 (codegen_runs.device_id FK -> devices.id)
    import src.domain.desktop_auth.models  # noqa: F401
    import src.domain.codegen.models  # noqa: F401
    import src.domain.codegen.provider_models  # noqa: F401
    import src.domain.l3_registry.models  # noqa: F401
    import src.domain.feature_packs.models  # noqa: F401
    import src.domain.deployments.models  # noqa: F401
    import src.domain.builder.models  # noqa: F401
    import src.domain.github_user_mirror.models  # noqa: F401
    import src.domain.gitlab_user_mirror.models  # noqa: F401
    import src.domain.bitbucket_user_mirror.models  # noqa: F401
    import src.domain.templates.models  # noqa: F401
    import src.domain.prompt_suggestions.models  # noqa: F401
    import src.domain.manifest.models  # noqa: F401
    import src.domain.shopify_apps.models  # noqa: F401
    import src.domain.connectors.models  # noqa: F401
    import src.domain.integration_events.models  # noqa: F401
    import src.domain.integration_control.models  # noqa: F401
    import src.domain.composition_recipes.models  # noqa: F401
    import src.domain.composition_recipes.installed_models  # noqa: F401
    import src.domain.storage_ingest.models  # noqa: F401
    import src.domain.forms.models  # noqa: F401
