| # app/ — application package |
|
|
| FastAPI application code for the **Asset Extractor API**. Monolith-modular |
| layout: the HTTP layer (`routers/`) is kept separate from business logic |
| (`services/`), with shared Pydantic models in `schemas.py` and central |
| settings in `config.py`. |
|
|
| ## Files |
|
|
| | File | Purpose | |
| |------|---------| |
| | `main.py` | Assembles the FastAPI app and registers the `assets` router. | |
| | `config.py` | Central settings (fetch timeouts, size caps, SSRF block-list). | |
| | `schemas.py`| Pydantic request/response models. | |
| | `routers/` | HTTP layer: `assets.py` (`POST /assets`). | |
| | `services/` | Business logic: `fetcher`, `resolver`, `asset_service`, and `extractors/`. | |
|
|
| ## Adding a new endpoint |
|
|
| 1. Add request/response models to `schemas.py`. |
| 2. Create a router under `routers/` (HTTP + error mapping only). |
| 3. Put the real logic in a `services/` module. |
| 4. Register the router in `main.py`. |
|
|
| Keep routers thin and services testable — that keeps the monolith modular |
| and easy to grow. |
|
|