# icesun39/my_book_api architecture

> Architecture diagram of the GitHub repository icesun39/my_book_api, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/icesun39/my_book_api
- Repository: https://github.com/icesun39/my_book_api

## Overview

Book API is an asynchronous REST service for user accounts, authors, books, and favorites. Clients enter through the FastAPI app and resource routers, which delegate operations to services; services validate and transform data through schemas and persist domain records through SQLAlchemy to PostgreSQL. The README also documents JWT authorization, role-based access, and password hashing. Authentication wiring is represented at the documented capability level because its source was not sampled.

Main entry points: [`src/backend/main.py`](https://github.com/icesun39/my_book_api/blob/dev/src/backend/main.py) (FastAPI app), [`src/backend/routers/author_routes.py`](https://github.com/icesun39/my_book_api/blob/dev/src/backend/routers/author_routes.py) (Author routes), [`src/backend/services/book_services.py`](https://github.com/icesun39/my_book_api/blob/dev/src/backend/services/book_services.py) (Book service), [`src/backend/services/user_services.py`](https://github.com/icesun39/my_book_api/blob/dev/src/backend/services/user_services.py) (User service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API surface"]
  node_app["FastAPI app<br/>[main.py]"]
  node_book_routes["Book routes<br/>[book_routes.py]"]
  node_author_routes["Author routes<br/>[author_routes.py]"]
  node_user_routes["User routes<br/>[user_routes.py]"]
  node_auth_routes["Auth routes<br/>[auth.py]"]
  node_book_schemas["Book schemas<br/>[book_schemas.py]"]
  node_author_schemas["Author schemas<br/>[author_schemas.py]"]
  node_user_schemas["User schemas<br/>[user_schemas.py]"]
end

subgraph group_services["Domain services"]
  node_book_service["Book service<br/>[book_services.py]"]
  node_author_service["Author service<br/>[author_service.py]"]
  node_user_service["User service<br/>[user_services.py]"]
end

subgraph group_identity["Identity and access"]
  node_auth_service["Auth service<br/>[auth_service.py]"]
  node_access["Access controls<br/>[dependencies.py]"]
  node_security["Password and JWT<br/>[security.py]"]
end

subgraph group_data["Persistence"]
  node_session["Async session<br/>[database.py]"]
  node_book_model["Book model<br/>[book.py]"]
  node_author_model["Author model<br/>[author.py]"]
  node_user_model["User model<br/>[user.py]"]
  node_book_author["Book-author link"]
  node_favorites["Favorite link"]
end

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

node_client -->|"sends requests"| node_app
node_app -->|"registers routes"| node_book_routes
node_app -->|"registers routes"| node_author_routes
node_app -->|"registers routes"| node_user_routes
node_app -->|"registers routes"| node_auth_routes
node_book_routes -->|"dispatches"| node_book_service
node_author_routes -->|"dispatches"| node_author_service
node_user_routes -->|"dispatches"| node_user_service
node_book_routes -->|"validates responses"| node_book_schemas
node_author_routes -->|"validates responses"| node_author_schemas
node_author_routes -->|"validates responses"| node_book_schemas
node_user_routes -->|"validates requests"| node_user_schemas
node_book_service -->|"queries and commits"| node_session
node_author_service -->|"queries and commits"| node_session
node_user_service -->|"queries and commits"| node_session
node_book_service -->|"loads user"| node_user_service
node_user_service -->|"hashes passwords"| node_security
node_book_service -->|"reads and writes"| node_book_model
node_book_service -->|"reads authors"| node_author_model
node_author_service -->|"reads and writes"| node_author_model
node_author_service -->|"reads books"| node_book_model
node_user_service -->|"reads and writes"| node_user_model
node_book_model -->|"uses association"| node_book_author
node_author_model -->|"uses association"| node_book_author
node_user_model -->|"uses association"| node_favorites
node_session -->|"persists data"| node_postgres
node_book_routes -->|"requires user or admin"| node_access
node_author_routes -->|"requires user or admin"| node_access
node_user_routes -->|"requires admin"| node_access
node_auth_routes -.->|"authentication capability"| node_auth_service
node_access -.->|"uses JWT controls"| node_security

click node_app "https://github.com/icesun39/my_book_api/blob/dev/src/backend/main.py"
click node_book_routes "https://github.com/icesun39/my_book_api/blob/dev/src/backend/routers/book_routes.py"
click node_author_routes "https://github.com/icesun39/my_book_api/blob/dev/src/backend/routers/author_routes.py"
click node_user_routes "https://github.com/icesun39/my_book_api/blob/dev/src/backend/routers/user_routes.py"
click node_auth_routes "https://github.com/icesun39/my_book_api/blob/dev/src/backend/routers/auth.py"
click node_book_schemas "https://github.com/icesun39/my_book_api/blob/dev/src/backend/schemas/book_schemas.py"
click node_author_schemas "https://github.com/icesun39/my_book_api/blob/dev/src/backend/schemas/author_schemas.py"
click node_user_schemas "https://github.com/icesun39/my_book_api/blob/dev/src/backend/schemas/user_schemas.py"
click node_book_service "https://github.com/icesun39/my_book_api/blob/dev/src/backend/services/book_services.py"
click node_author_service "https://github.com/icesun39/my_book_api/blob/dev/src/backend/services/author_service.py"
click node_user_service "https://github.com/icesun39/my_book_api/blob/dev/src/backend/services/user_services.py"
click node_auth_service "https://github.com/icesun39/my_book_api/blob/dev/src/backend/services/auth_service.py"
click node_access "https://github.com/icesun39/my_book_api/blob/dev/src/backend/core/dependencies.py"
click node_security "https://github.com/icesun39/my_book_api/blob/dev/src/backend/core/security.py"
click node_session "https://github.com/icesun39/my_book_api/blob/dev/src/backend/database/database.py"
click node_book_model "https://github.com/icesun39/my_book_api/blob/dev/src/backend/models/book.py"
click node_author_model "https://github.com/icesun39/my_book_api/blob/dev/src/backend/models/author.py"
click node_user_model "https://github.com/icesun39/my_book_api/blob/dev/src/backend/models/user.py"
click node_book_author "https://github.com/icesun39/my_book_api/blob/dev/src/backend/models/associations/books_and_authors.py"
click node_favorites "https://github.com/icesun39/my_book_api/blob/dev/src/backend/models/associations/user_favorite_books.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_book_routes,node_author_routes,node_user_routes,node_auth_routes,node_book_schemas,node_author_schemas,node_user_schemas,node_client toneBlue
class node_book_service,node_author_service,node_user_service,node_postgres toneAmber
class node_auth_service,node_access,node_security toneMint
class node_session,node_book_model,node_author_model,node_user_model,node_book_author,node_favorites toneRose
```

## Components

### API surface

- [FastAPI app](https://github.com/icesun39/my_book_api/blob/dev/src/backend/main.py): `src/backend/main.py`
- [Book routes](https://github.com/icesun39/my_book_api/blob/dev/src/backend/routers/book_routes.py): `src/backend/routers/book_routes.py`
- [Author routes](https://github.com/icesun39/my_book_api/blob/dev/src/backend/routers/author_routes.py): `src/backend/routers/author_routes.py`
- [User routes](https://github.com/icesun39/my_book_api/blob/dev/src/backend/routers/user_routes.py): `src/backend/routers/user_routes.py`
- [Auth routes](https://github.com/icesun39/my_book_api/blob/dev/src/backend/routers/auth.py): `src/backend/routers/auth.py`
- [Book schemas](https://github.com/icesun39/my_book_api/blob/dev/src/backend/schemas/book_schemas.py): `src/backend/schemas/book_schemas.py`
- [Author schemas](https://github.com/icesun39/my_book_api/blob/dev/src/backend/schemas/author_schemas.py): `src/backend/schemas/author_schemas.py`
- [User schemas](https://github.com/icesun39/my_book_api/blob/dev/src/backend/schemas/user_schemas.py): `src/backend/schemas/user_schemas.py`

### Domain services

- [Book service](https://github.com/icesun39/my_book_api/blob/dev/src/backend/services/book_services.py): `src/backend/services/book_services.py`
- [Author service](https://github.com/icesun39/my_book_api/blob/dev/src/backend/services/author_service.py): `src/backend/services/author_service.py`
- [User service](https://github.com/icesun39/my_book_api/blob/dev/src/backend/services/user_services.py): `src/backend/services/user_services.py`

### Identity and access

- [Auth service](https://github.com/icesun39/my_book_api/blob/dev/src/backend/services/auth_service.py): `src/backend/services/auth_service.py`
- [Access controls](https://github.com/icesun39/my_book_api/blob/dev/src/backend/core/dependencies.py): `src/backend/core/dependencies.py`
- [Password and JWT](https://github.com/icesun39/my_book_api/blob/dev/src/backend/core/security.py): `src/backend/core/security.py`

### Persistence

- [Async session](https://github.com/icesun39/my_book_api/blob/dev/src/backend/database/database.py): `src/backend/database/database.py`
- [Book model](https://github.com/icesun39/my_book_api/blob/dev/src/backend/models/book.py): `src/backend/models/book.py`
- [Author model](https://github.com/icesun39/my_book_api/blob/dev/src/backend/models/author.py): `src/backend/models/author.py`
- [User model](https://github.com/icesun39/my_book_api/blob/dev/src/backend/models/user.py): `src/backend/models/user.py`
- [Book-author link](https://github.com/icesun39/my_book_api/blob/dev/src/backend/models/associations/books_and_authors.py): `src/backend/models/associations/books_and_authors.py`
- [Favorite link](https://github.com/icesun39/my_book_api/blob/dev/src/backend/models/associations/user_favorite_books.py): `src/backend/models/associations/user_favorite_books.py`

### Other components

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

## Connections

- API client → FastAPI app: sends requests
- FastAPI app → Book routes: registers routes
- FastAPI app → Author routes: registers routes
- FastAPI app → User routes: registers routes
- FastAPI app → Auth routes: registers routes
- Book routes → Book service: dispatches
- Author routes → Author service: dispatches
- User routes → User service: dispatches
- Book routes → Book schemas: validates responses
- Author routes → Author schemas: validates responses
- Author routes → Book schemas: validates responses
- User routes → User schemas: validates requests
- Book service → Async session: queries and commits
- Author service → Async session: queries and commits
- User service → Async session: queries and commits
- Book service → User service: loads user
- User service → Password and JWT: hashes passwords
- Book service → Book model: reads and writes
- Book service → Author model: reads authors
- Author service → Author model: reads and writes
- Author service → Book model: reads books
- User service → User model: reads and writes
- Book model → Book-author link: uses association
- Author model → Book-author link: uses association
- User model → Favorite link: uses association
- Async session → PostgreSQL: persists data
- Book routes → Access controls: requires user or admin
- Author routes → Access controls: requires user or admin
- User routes → Access controls: requires admin
- Auth routes → Auth service: authentication capability
- Access controls → Password and JWT: uses JWT controls
