2.6 KiB
2.6 KiB
Architecture Overview
System Topology
DMS runs as a multi-service application defined in docker-compose.yml:
frontendserves the React UI on port5173apiserves FastAPI on port8000workerexecutes asynchronous extraction and indexing jobsdbprovides PostgreSQL persistence on port5432redisbacks queueing on port6379typesensestores search index and vector-adjacent metadata on port8108
Backend Architecture
Backend source root: backend/app/
Main boundaries:
api/route handlers and HTTP contractservices/domain logic (storage, extraction, routing, settings, processing logs, Typesense)db/SQLAlchemy base, engine, and session lifecyclemodels/persistence entities (Document,ProcessingLogEntry)schemas/Pydantic response and request schemasworker/RQ queue integration and background processing tasks
Application bootstrap in backend/app/main.py:
- mounts routers under
/api/v1 - configures CORS from settings
- initializes storage, settings, database schema, and Typesense collection on startup
Processing Lifecycle
- Upload starts at
POST /api/v1/documents/upload. - API stores file bytes and inserts document rows with status
queued. - API enqueues
app.worker.tasks.process_document_taskinto Redis. - Worker extracts content and metadata, handles ZIP expansion, runs OCR and routing suggestions, and writes processing logs.
- Worker updates database fields, document status, and search index entries.
- UI polls for documents and processing logs to reflect progress.
Frontend Architecture
Frontend source root: frontend/src/
Core structure:
App.tsxorchestrates screen switching, state, polling, and action flowscomponents/contains upload, filter, grid, viewer, modal, settings, and log panel moduleslib/api.tscentralizes API client callstypes.tsdefines typed API contracts used by componentsdesign-foundation.cssandstyles.cssdefine design tokens and global/component styling
Main user flows:
- Upload and conflict resolution
- Search and filtered document browsing
- Metadata editing and lifecycle actions (trash, restore, delete, reprocess)
- Settings management for providers, tasks, and UI defaults
- Processing log review
Persistence and State
Persistent data:
- PostgreSQL stores document metadata and processing logs
- Docker volume-backed storage keeps original files, previews, and settings JSON
- Typesense stores indexed search representations
Transient runtime state:
- Redis queues processing tasks and worker execution state
- frontend local component state drives active filters, selection, and modal flows