Spaces:
Build error
Build error
| # Backend Architecture | |
| Quick reference for understanding the FastAPI backend structure. | |
| For frontend architecture, see [architecture-frontend.md](./architecture-frontend.md). | |
| ## Overview | |
| - **Main application**: [fastapi_app/main.py](../../fastapi_app/main.py) - FastAPI app with router and plugin registration | |
| - **API routes**: [fastapi_app/routers/](../../fastapi_app/routers/) - Route handlers (`files_*.py`, `users.py`, etc.) | |
| - **Library**: [fastapi_app/lib/](../../fastapi_app/lib/) - Core logic organized by domain | |
| - **Plugins**: [fastapi_app/plugins/](../../fastapi_app/plugins/) - Plugin implementations | |
| - **Data storage**: `data/` - PDFs and TEI/XML files | |
| - **Configuration**: `config/` (defaults) and `data/db/` (runtime) | |
| - **Database**: `data/db/metadata.db` - SQLite file metadata database | |
| ## Library Structure (`fastapi_app/lib/`) | |
| ### `core/` β Infrastructure | |
| | File | Purpose | | |
| |------|---------| | |
| | `database.py` | `DatabaseManager`, connection pooling | | |
| | `db_schema.py` | Schema initialization | | |
| | `db_utils.py` | Database utilities | | |
| | `sqlite_utils.py` | SQLite-specific utilities | | |
| | `db_init.py` | DB initialization helpers | | |
| | `dependencies.py` | FastAPI dependency injection providers | | |
| | `locking.py` | File locking system | | |
| | `sessions.py` | Session management | | |
| | `schema_validator.py` | Schema validation | | |
| | `data_restore.py` | Data restoration utilities | | |
| | `migration_runner.py` | Migration execution | | |
| | `migrations/` | Migration system (`base.py`, `manager.py`, `utils.py`, `versions/`) | | |
| ### `models/` β Pydantic Data Models | |
| | File | Purpose | | |
| |------|---------| | |
| | `models.py` | Core models (`FileMetadata`, etc.) | | |
| | `models_files.py` | File operation models | | |
| | `models_extraction.py` | Extraction models | | |
| | `models_permissions.py` | Permission models | | |
| | `models_sync.py` | Sync models | | |
| | `models_validation.py` | Validation models | | |
| ### `repository/` β Data Access Layer | |
| | File | Purpose | | |
| |------|---------| | |
| | `file_repository.py` | File metadata repository | | |
| | `permissions_db.py` | Permissions database | | |
| ### `services/` β Business Logic | |
| | File | Purpose | | |
| |------|---------| | |
| | `metadata_extraction.py` | Metadata extraction service | | |
| | `metadata_update_utils.py` | Metadata update utilities | | |
| | `sync_service.py` | WebDAV sync service | | |
| | `statistics.py` | Statistics calculation | | |
| | `service_registry.py` | Service registry | | |
| ### `storage/` β File I/O | |
| | File | Purpose | | |
| |------|---------| | |
| | `file_storage.py` | File storage operations | | |
| | `file_importer.py` | File import utilities | | |
| | `file_exporter.py` | File export utilities | | |
| | `file_zip_exporter.py` | ZIP export | | |
| | `file_zip_importer.py` | ZIP import | | |
| | `storage_gc.py` | Garbage collection | | |
| | `storage_references.py` | Reference counting | | |
| ### `permissions/` β Access Control | |
| | File | Purpose | | |
| |------|---------| | |
| | `access_control.py` | Access control manager | | |
| | `acl_utils.py` | ACL utilities | | |
| | `role_utils.py` | Role management | | |
| | `group_utils.py` | Group management | | |
| | `user_utils.py` | User utilities | | |
| ### `plugins/` β Plugin System (Generic) | |
| | File | Purpose | | |
| |------|---------| | |
| | `plugin_base.py` | Plugin base classes | | |
| | `plugin_manager.py` | Plugin lifecycle management | | |
| | `plugin_registry.py` | Plugin registration | | |
| | `plugin_tools.py` | Plugin utilities | | |
| | `frontend_extension_registry.py` | Frontend extension registration | | |
| ### `extraction/` β Extraction Framework (Generic) | |
| | File | Purpose | | |
| |------|---------| | |
| | `base.py` | `BaseExtractor` class | | |
| | `llm_base.py` | LLM extractor base | | |
| | `registry.py` | Extractor registry | | |
| | `manager.py` | Extractor management | | |
| | `http_utils.py` | HTTP utilities | | |
| ### `sse/` β Server-Sent Events | |
| | File | Purpose | | |
| |------|---------| | |
| | `sse_service.py` | SSE service | | |
| | `sse_utils.py` | SSE utilities (`ProgressBar`, `send_notification`) | | |
| | `sse_log_handler.py` | Log streaming | | |
| | `event_bus.py` | Event bus | | |
| ### `utils/` β Common Utilities | |
| | File | Purpose | | |
| |------|---------| | |
| | `config_utils.py` | Configuration management (`get_config`) | | |
| | `auth.py` | Authentication (`AuthManager`) | | |
| | `tei_utils.py` | TEI document processing | | |
| | `xml_utils.py` | XML utilities | | |
| | `doi_utils.py` | DOI utilities | | |
| | `cache_utils.py` | Caching | | |
| | `logging_utils.py` | Logging configuration | | |
| | `data_utils.py` | Data utilities | | |
| | `debug_utils.py` | Debugging utilities | | |
| | `hash_utils.py` | Hashing utilities | | |
| | `stable_id.py` | Stable ID generation | | |
| | `relaxng_to_codemirror.py` | Schema conversion | | |
| | `remote_metadata.py` | Remote metadata | | |
| | `doc_id_resolver.py` | Document ID resolution | | |
| | `autocomplete_generator.py` | Autocomplete | | |
| | `collection_utils.py` | Collection utilities | | |
| | `server_utils.py` | Server utilities | | |
| | `server_startup.py` | Server startup | | |
| ### `interfaces/` β Abstract Base Classes | |
| - `__init__.py` β Repository, Service, Plugin interfaces | |
| ## Dependency Hierarchy | |
| ``` | |
| core/ β models/ β repository/ β services/ β plugins/ | |
| β extraction/ β utils/ | |
| ``` | |
| - `core/` β depends only on Python standard library | |
| - `models/` β depends on `core/` and Pydantic | |
| - `repository/` β depends on `core/` and `models/` | |
| - `services/` β depends on `core/`, `models/`, and `repository/` | |
| - `plugins/` β depends on `services/` and `utils/` | |
| - `extraction/` β depends on `services/` and `utils/` | |
| - `utils/` β depends on `core/` only | |
| ## Plugin Implementations | |
| Plugin-specific implementations live in `fastapi_app/plugins/<name>/`. The `lib/` directory contains only generic, reusable code. See [backend-plugins.md](./backend-plugins.md) for plugin development guide. | |
| ## Common Import Patterns | |
| ```python | |
| # Core infrastructure | |
| from fastapi_app.lib.core.database import DatabaseManager | |
| from fastapi_app.lib.core.dependencies import get_db, get_file_storage | |
| from fastapi_app.lib.core.sessions import SessionManager | |
| from fastapi_app.lib.core.locking import FileLock | |
| from fastapi_app.lib.core.migration_runner import run_migrations_if_needed | |
| # Models | |
| from fastapi_app.lib.models.models import FileMetadata | |
| # Data access | |
| from fastapi_app.lib.repository.file_repository import FileRepository | |
| # Storage | |
| from fastapi_app.lib.storage.file_storage import FileStorage | |
| # Services | |
| from fastapi_app.lib.services.sync_service import SyncService | |
| from fastapi_app.lib.services.service_registry import get_service_registry | |
| # Permissions | |
| from fastapi_app.lib.permissions.user_utils import user_has_collection_access | |
| from fastapi_app.lib.permissions.access_control import AccessControlManager | |
| # Plugins | |
| from fastapi_app.lib.plugins.plugin_base import Plugin | |
| from fastapi_app.lib.plugins.plugin_tools import get_plugin_config, load_plugin_html | |
| from fastapi_app.lib.plugins.frontend_extension_registry import FrontendExtensionRegistry | |
| # SSE | |
| from fastapi_app.lib.sse.sse_utils import ProgressBar, send_notification | |
| from fastapi_app.lib.sse.sse_service import SSEService | |
| from fastapi_app.lib.sse.event_bus import EventBus | |
| # Utilities | |
| from fastapi_app.lib.utils.config_utils import get_config | |
| from fastapi_app.lib.utils.auth import AuthManager | |
| from fastapi_app.lib.utils.tei_utils import extract_tei_metadata | |
| ``` | |