41 lines
1.4 KiB
Markdown
41 lines
1.4 KiB
Markdown
# Test Task CRM
|
|
|
|
FastAPI backend template that follows the architecture described in the system prompt: async SQLAlchemy ORM, Alembic-ready models, service/repository layers, JWT auth helpers, and Pydantic v2 schemas.
|
|
|
|
## Quick start
|
|
|
|
1. Create a `.env` file based on variables in `app/core/config.py`.
|
|
2. Install dependencies:
|
|
```bash
|
|
uv sync
|
|
```
|
|
3. Run the development server:
|
|
```bash
|
|
uv run python main.py
|
|
```
|
|
|
|
## Project layout
|
|
|
|
```
|
|
app/
|
|
api/ # FastAPI routers and dependencies
|
|
core/ # Settings, database, security helpers
|
|
models/ # SQLAlchemy models and Pydantic schemas
|
|
repositories/ # Data access layer (SQLAlchemy ORM usage)
|
|
services/ # Business logic (auth, users, etc.)
|
|
```
|
|
|
|
Add new routers under `app/api/v1`, repositories under `app/repositories`, and keep business rules inside `app/services`.
|
|
|
|
## Redis analytics cache
|
|
|
|
Analytics endpoints can use a Redis cache (TTL 120 seconds). The cache is disabled by default, so the service falls back to the database.
|
|
|
|
1. Start Redis and set the following variables:
|
|
- `REDIS_ENABLED=true`
|
|
- `REDIS_URL=redis://localhost:6379/0`
|
|
- `ANALYTICS_CACHE_TTL_SECONDS` (optional, defaults to 120)
|
|
- `ANALYTICS_CACHE_BACKOFF_MS` (max delay for write/delete retries, defaults to 200)
|
|
2. When Redis becomes unavailable, middleware logs the degradation and responses transparently fall back to database queries until connectivity is restored.
|
|
|