mirror of
https://github.com/dograh-hq/dograh.git
synced 2026-06-07 07:55:16 +02:00
Add a worker sync event so that runtime updates on one worker can propagate across other workers using pubsub for multi worker deployments
54 lines
2.3 KiB
Markdown
54 lines
2.3 KiB
Markdown
# API - Backend Service
|
|
|
|
FastAPI backend for the Dograh voice AI platform.
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
api/
|
|
├── app.py # Application entry point, FastAPI setup
|
|
├── routes/ # API endpoint handlers
|
|
├── services/ # Business logic and integrations
|
|
├── db/ # Database models and data access
|
|
├── schemas/ # Pydantic request/response schemas
|
|
├── tasks/ # Background jobs (ARQ)
|
|
├── utils/ # Utility functions
|
|
├── alembic/ # Database migrations
|
|
├── constants.py # Environment variables and constants
|
|
└── tests/ # Test suite
|
|
```
|
|
|
|
## Where to Find Things
|
|
|
|
| Looking for... | Go to... |
|
|
| ---------------------- | ------------------------------------------------------------------------ |
|
|
| API endpoints | `routes/` - each file is a router module, aggregated in `routes/main.py` |
|
|
| Business logic | `services/` - organized by domain (telephony, workflow, campaign, etc.) |
|
|
| Database models | `db/models.py` |
|
|
| Database queries | `db/*_client.py` files (repository pattern) |
|
|
| Request/response types | `schemas/` |
|
|
| Background tasks | `tasks/` - uses ARQ for async job processing |
|
|
| Environment config | `constants.py` |
|
|
|
|
## API Structure
|
|
|
|
- All routes are mounted at `/api/v1` prefix
|
|
- Routes are organized by domain (workflow, telephony, campaign, user, etc.)
|
|
- `routes/main.py` aggregates all routers
|
|
|
|
## Database Migrations
|
|
|
|
```bash
|
|
./scripts/makemigrate.sh "description" # Create migration
|
|
./scripts/migrate.sh # Run migrations
|
|
```
|
|
|
|
## Cross-Worker State Sync
|
|
|
|
When an API endpoint updates in-memory state (e.g. cached credentials, config objects), that change only affects the worker process that handled the request. With multiple FastAPI workers, **use `WorkerSyncManager`** (`services/worker_sync/`) to propagate changes to all workers via Redis pub/sub instead of updating local state directly.
|
|
|
|
## Development
|
|
|
|
```bash
|
|
uvicorn api.app:app --reload --port 8000
|
|
```
|