# rhoboro/async-fastapi-sqlalchemy architecture

> Architecture diagram of the GitHub repository rhoboro/async-fastapi-sqlalchemy, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-10-01). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/rhoboro/async-fastapi-sqlalchemy
- Repository: https://github.com/rhoboro/async-fastapi-sqlalchemy

## Overview

This repository is a sample asynchronous FastAPI service for managing notebooks and notes with SQLAlchemy. A client sends requests through the application router to domain-specific views; views invoke use cases, which validate related records and perform CRUD operations through ORM models and an async database session. Notebook and note schemas shape API inputs and outputs. The README documents PostgreSQL setup and API access. The graph reflects the sampled entry points, use cases, and models; unsampled implementation details are omitted.

Main entry points: [`app/api/notebooks/use_cases.py`](https://github.com/rhoboro/async-fastapi-sqlalchemy/blob/main/app/api/notebooks/use_cases.py) (Notebook use cases), [`app/api/notes/use_cases.py`](https://github.com/rhoboro/async-fastapi-sqlalchemy/blob/main/app/api/notes/use_cases.py) (Note use cases), [`app/models/notebooks.py`](https://github.com/rhoboro/async-fastapi-sqlalchemy/blob/main/app/models/notebooks.py) (Notebook model), [`app/models/notes.py`](https://github.com/rhoboro/async-fastapi-sqlalchemy/blob/main/app/models/notes.py) (Note model)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API routing"]
  node_app["FastAPI app<br/>[main.py]"]
  node_api_router["API router<br/>[main.py]"]
end

subgraph group_notebooks["Notebook domain"]
  node_notebook_views["Notebook views<br/>[views.py]"]
  node_notebook_schema["Notebook API schemas<br/>[schema.py]"]
  node_notebook_cases["Notebook use cases<br/>[use_cases.py]"]
  node_notebook_model["Notebook model<br/>[notebooks.py]"]
end

subgraph group_notes["Note domain"]
  node_note_views["Note views<br/>[views.py]"]
  node_note_schema["Note API schemas<br/>[schema.py]"]
  node_note_cases["Note use cases<br/>[use_cases.py]"]
  node_note_model["Note model<br/>[notes.py]"]
end

subgraph group_persistence["Persistence"]
  node_model_schemas["Model schemas<br/>[schema.py]"]
  node_db_session["Async DB sessions<br/>[db.py]"]
  node_settings["Database settings<br/>[settings.py]"]
end

node_client(("API client"))
node_postgres[("PostgreSQL")]

node_client -->|"sends requests"| node_app
node_app -->|"mounts at /api"| node_api_router
node_api_router -->|"registers routes"| node_notebook_views
node_api_router -->|"registers routes"| node_note_views
node_notebook_views -->|"dispatches requests"| node_notebook_cases
node_notebook_views -->|"uses request and response"| node_notebook_schema
node_notebook_cases -->|"reads and changes"| node_notebook_model
node_notebook_cases -->|"checks note records"| node_note_model
node_notebook_cases -->|"validates output"| node_model_schemas
node_note_views -->|"dispatches requests"| node_note_cases
node_note_views -->|"uses request and response"| node_note_schema
node_note_cases -->|"reads and changes"| node_note_model
node_note_cases -->|"checks notebook records"| node_notebook_model
node_note_cases -->|"validates output"| node_model_schemas
node_notebook_cases -->|"opens sessions"| node_db_session
node_note_cases -->|"opens sessions"| node_db_session
node_db_session -->|"loads connection settings"| node_settings
node_notebook_model -->|"queries and persists"| node_postgres
node_note_model -->|"queries and persists"| node_postgres
node_notebook_model -->|"relates notebooks to notes"| node_note_model

click node_app "https://github.com/rhoboro/async-fastapi-sqlalchemy/blob/main/app/main.py"
click node_api_router "https://github.com/rhoboro/async-fastapi-sqlalchemy/blob/main/app/api/main.py"
click node_notebook_views "https://github.com/rhoboro/async-fastapi-sqlalchemy/blob/main/app/api/notebooks/views.py"
click node_notebook_schema "https://github.com/rhoboro/async-fastapi-sqlalchemy/blob/main/app/api/notebooks/schema.py"
click node_notebook_cases "https://github.com/rhoboro/async-fastapi-sqlalchemy/blob/main/app/api/notebooks/use_cases.py"
click node_notebook_model "https://github.com/rhoboro/async-fastapi-sqlalchemy/blob/main/app/models/notebooks.py"
click node_note_views "https://github.com/rhoboro/async-fastapi-sqlalchemy/blob/main/app/api/notes/views.py"
click node_note_schema "https://github.com/rhoboro/async-fastapi-sqlalchemy/blob/main/app/api/notes/schema.py"
click node_note_cases "https://github.com/rhoboro/async-fastapi-sqlalchemy/blob/main/app/api/notes/use_cases.py"
click node_note_model "https://github.com/rhoboro/async-fastapi-sqlalchemy/blob/main/app/models/notes.py"
click node_model_schemas "https://github.com/rhoboro/async-fastapi-sqlalchemy/blob/main/app/models/schema.py"
click node_db_session "https://github.com/rhoboro/async-fastapi-sqlalchemy/blob/main/app/db.py"
click node_settings "https://github.com/rhoboro/async-fastapi-sqlalchemy/blob/main/app/settings.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_api_router,node_client toneBlue
class node_notebook_views,node_notebook_schema,node_notebook_cases,node_notebook_model,node_postgres toneAmber
class node_note_views,node_note_schema,node_note_cases,node_note_model toneMint
class node_model_schemas,node_db_session,node_settings toneRose
```

## Components

### API routing

- [FastAPI app](https://github.com/rhoboro/async-fastapi-sqlalchemy/blob/main/app/main.py): `app/main.py`
- [API router](https://github.com/rhoboro/async-fastapi-sqlalchemy/blob/main/app/api/main.py): `app/api/main.py`

### Notebook domain

- [Notebook views](https://github.com/rhoboro/async-fastapi-sqlalchemy/blob/main/app/api/notebooks/views.py): `app/api/notebooks/views.py`
- [Notebook API schemas](https://github.com/rhoboro/async-fastapi-sqlalchemy/blob/main/app/api/notebooks/schema.py): `app/api/notebooks/schema.py`
- [Notebook use cases](https://github.com/rhoboro/async-fastapi-sqlalchemy/blob/main/app/api/notebooks/use_cases.py): `app/api/notebooks/use_cases.py`
- [Notebook model](https://github.com/rhoboro/async-fastapi-sqlalchemy/blob/main/app/models/notebooks.py): `app/models/notebooks.py`

### Note domain

- [Note views](https://github.com/rhoboro/async-fastapi-sqlalchemy/blob/main/app/api/notes/views.py): `app/api/notes/views.py`
- [Note API schemas](https://github.com/rhoboro/async-fastapi-sqlalchemy/blob/main/app/api/notes/schema.py): `app/api/notes/schema.py`
- [Note use cases](https://github.com/rhoboro/async-fastapi-sqlalchemy/blob/main/app/api/notes/use_cases.py): `app/api/notes/use_cases.py`
- [Note model](https://github.com/rhoboro/async-fastapi-sqlalchemy/blob/main/app/models/notes.py): `app/models/notes.py`

### Persistence

- [Model schemas](https://github.com/rhoboro/async-fastapi-sqlalchemy/blob/main/app/models/schema.py): `app/models/schema.py`
- [Async DB sessions](https://github.com/rhoboro/async-fastapi-sqlalchemy/blob/main/app/db.py): `app/db.py`
- [Database settings](https://github.com/rhoboro/async-fastapi-sqlalchemy/blob/main/app/settings.py): `app/settings.py`

### Other components

- **API client**
- **PostgreSQL**

## Connections

- API client → FastAPI app: sends requests (evidence: `README.md`)
- FastAPI app → API router: mounts at /api (evidence: `app/main.py`)
- API router → Notebook views: registers routes (evidence: `app/api/main.py`)
- API router → Note views: registers routes (evidence: `app/api/main.py`)
- Notebook views → Notebook use cases: dispatches requests (evidence: `app/api/notebooks/views.py`)
- Notebook views → Notebook API schemas: uses request and response (evidence: `app/api/notebooks/views.py`)
- Notebook use cases → Notebook model: reads and changes (evidence: `app/api/notebooks/use_cases.py`)
- Notebook use cases → Note model: checks note records (evidence: `app/api/notebooks/use_cases.py`)
- Notebook use cases → Model schemas: validates output (evidence: `app/api/notebooks/use_cases.py`)
- Note views → Note use cases: dispatches requests (evidence: `app/api/notes/views.py`)
- Note views → Note API schemas: uses request and response (evidence: `app/api/notes/views.py`)
- Note use cases → Note model: reads and changes (evidence: `app/api/notes/use_cases.py`)
- Note use cases → Notebook model: checks notebook records (evidence: `app/api/notes/use_cases.py`)
- Note use cases → Model schemas: validates output (evidence: `app/api/notes/use_cases.py`)
- Notebook use cases → Async DB sessions: opens sessions (evidence: `app/api/notebooks/use_cases.py`)
- Note use cases → Async DB sessions: opens sessions (evidence: `app/api/notes/use_cases.py`)
- Async DB sessions → Database settings: loads connection settings (evidence: `app/db.py`)
- Notebook model → PostgreSQL: queries and persists (evidence: `app/models/notebooks.py`)
- Note model → PostgreSQL: queries and persists (evidence: `app/models/notes.py`)
- Notebook model → Note model: relates notebooks to notes (evidence: `app/models/notebooks.py`)
