from fastapi import FastAPI from fastapi.staticfiles import StaticFiles from admin_app.api.router import api_router from admin_app.core.settings import AdminSettings, get_admin_settings from admin_app.view import PANEL_STATIC_DIRECTORY, PANEL_STATIC_MOUNT_NAME, panel_router # Fabrica explicita do runtime administrativo para facilitar testes e futura configuracao. def create_app(settings: AdminSettings | None = None) -> FastAPI: resolved_settings = settings or get_admin_settings() app = FastAPI( title=resolved_settings.admin_app_name, version=resolved_settings.admin_version, debug=resolved_settings.admin_debug, ) app.state.admin_settings = resolved_settings app.mount( _build_panel_static_path(resolved_settings.admin_api_prefix), StaticFiles(directory=str(PANEL_STATIC_DIRECTORY)), name=PANEL_STATIC_MOUNT_NAME, ) app.include_router(api_router, prefix=resolved_settings.admin_api_prefix) app.include_router(panel_router, prefix=resolved_settings.admin_api_prefix) return app def _build_panel_static_path(api_prefix: str) -> str: normalized_prefix = api_prefix.rstrip("/") if normalized_prefix: return f"{normalized_prefix}/panel/assets" return "/panel/assets"