# rautaruukkipalich/library architecture

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

- Interactive diagram: https://gitdiagram.com/rautaruukkipalich/library
- Repository: https://github.com/rautaruukkipalich/library

## Overview

This is a Spring Boot library application with account authentication, a book/author/genre catalog, and media upload, retrieval, and processing. Users call REST controllers; domain services/use cases perform the requested work, with PostgreSQL repositories for catalog and account state and local storage for media files. The media subsystem also validates uploads, extracts metadata, and supports asynchronous task processing. The tree and sampled sources establish these responsibilities, but do not expose every controller-to-service wiring detail, so uncertain links are omitted.

Main entry points: [`src/main/java/com/app/modules`](https://github.com/rautaruukkipalich/library/tree/master/src/main/java/com/app/modules) (Postgres repositories), [`src/main/java/com/app/modules/auth/impl/AuthServiceImpl.java`](https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/auth/impl/AuthServiceImpl.java) (Authentication), [`src/main/java/com/app/modules/media/usecase`](https://github.com/rautaruukkipalich/library/tree/master/src/main/java/com/app/modules/media/usecase) (Media operations), [`src/main/java/com/app/modules/user/impl/UserServiceImpl.java`](https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/user/impl/UserServiceImpl.java) (User services)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["API and security"]
  node_auth_filter["JWT filter"]
  node_auth_controller["Auth controller"]
  node_user_controller["User controller"]
  node_book_controller["Book controller"]
  node_author_controller["Author controller"]
  node_genre_controller["Genre controller"]
  node_media_controller["Media controller"]
end

subgraph group_accounts["Accounts and auth"]
  node_auth_service["Authentication"]
  node_user_service["User services"]
  node_user_auth_query["Auth user lookup"]
  node_refresh_tokens["Refresh tokens"]
end

subgraph group_catalog["Library catalog"]
  node_book_service["Book service"]
  node_author_service["Author service"]
  node_genre_service["Genre service"]
end

subgraph group_media["Media management"]
  node_media_usecases["Media operations"]
  node_media_validation["Upload validation"]
  node_media_processing["Media processing"]
  node_metadata["Metadata extraction"]
  node_file_service["File service<br/>[FileService.java]"]
end

subgraph group_persistence["Persistence"]
  node_postgres_repos["Postgres repositories"]
  node_local_files["Local file storage"]
end

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

node_client -->|"calls"| node_auth_controller
node_client -->|"calls"| node_user_controller
node_client -->|"calls"| node_book_controller
node_client -->|"calls"| node_author_controller
node_client -->|"calls"| node_genre_controller
node_client -->|"calls"| node_media_controller
node_auth_filter -->|"looks up user"| node_user_auth_query
node_auth_controller -->|"delegates"| node_auth_service
node_auth_service -->|"uses account"| node_user_service
node_auth_service -->|"manages tokens"| node_refresh_tokens
node_user_controller -->|"delegates"| node_user_service
node_auth_service -->|"queries account"| node_user_auth_query
node_book_controller -->|"delegates"| node_book_service
node_author_controller -->|"delegates"| node_author_service
node_genre_controller -->|"delegates"| node_genre_service
node_media_controller -->|"dispatches"| node_media_usecases
node_media_usecases -->|"validates upload"| node_media_validation
node_media_usecases -->|"requests processing"| node_media_processing
node_media_usecases -->|"manages files"| node_file_service
node_media_processing -->|"reads metadata"| node_metadata
node_metadata -->|"reads file details"| node_file_service
node_file_service -->|"reads and writes"| node_local_files
node_auth_service -->|"persists account state"| node_postgres_repos
node_user_service -->|"persists users"| node_postgres_repos
node_refresh_tokens -->|"persists tokens"| node_postgres_repos
node_book_service -->|"persists catalog"| node_postgres_repos
node_author_service -->|"persists catalog"| node_postgres_repos
node_genre_service -->|"persists catalog"| node_postgres_repos
node_postgres_repos -->|"reads and writes"| node_postgres

click node_auth_filter "https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/core/security/jwt/JwtAuthenticationFilter.java"
click node_auth_controller "https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/auth/controller/AuthController.java"
click node_user_controller "https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/user/controller/UserController.java"
click node_book_controller "https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/book/controller/BookController.java"
click node_author_controller "https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/author/controller/AuthorController.java"
click node_genre_controller "https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/genre/controller/GenreController.java"
click node_media_controller "https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/media/controller/MediaController.java"
click node_auth_service "https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/auth/impl/AuthServiceImpl.java"
click node_user_service "https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/user/impl/UserServiceImpl.java"
click node_user_auth_query "https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/user/impl/UserAuthQueryServiceImpl.java"
click node_refresh_tokens "https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/refresh_token/impl/RefreshTokenServiceImpl.java"
click node_book_service "https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/book/impl/BookServiceImpl.java"
click node_author_service "https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/author/impl/AuthorServiceImpl.java"
click node_genre_service "https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/genre/impl/GenreServiceImpl.java"
click node_media_usecases "https://github.com/rautaruukkipalich/library/tree/master/src/main/java/com/app/modules/media/usecase"
click node_media_validation "https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/media/validator/MediaValidationService.java"
click node_media_processing "https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/media/service/MediaProcessingService.java"
click node_metadata "https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/media/metadata/MediaMetadataService.java"
click node_file_service "https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/media/service/FileService.java"
click node_postgres_repos "https://github.com/rautaruukkipalich/library/tree/master/src/main/java/com/app/modules"
click node_local_files "https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/media/repository/impl/LocalStorageRepositoryImpl.java"

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_auth_filter,node_auth_controller,node_user_controller,node_book_controller,node_author_controller,node_genre_controller,node_media_controller,node_client toneBlue
class node_auth_service,node_user_service,node_user_auth_query,node_refresh_tokens,node_postgres toneAmber
class node_book_service,node_author_service,node_genre_service toneMint
class node_media_usecases,node_media_validation,node_media_processing,node_metadata,node_file_service toneRose
class node_postgres_repos,node_local_files toneIndigo
```

## Components

### API and security

- [JWT filter](https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/core/security/jwt/JwtAuthenticationFilter.java): `src/main/java/com/app/core/security/jwt/JwtAuthenticationFilter.java`
- [Auth controller](https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/auth/controller/AuthController.java): `src/main/java/com/app/modules/auth/controller/AuthController.java`
- [User controller](https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/user/controller/UserController.java): `src/main/java/com/app/modules/user/controller/UserController.java`
- [Book controller](https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/book/controller/BookController.java): `src/main/java/com/app/modules/book/controller/BookController.java`
- [Author controller](https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/author/controller/AuthorController.java): `src/main/java/com/app/modules/author/controller/AuthorController.java`
- [Genre controller](https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/genre/controller/GenreController.java): `src/main/java/com/app/modules/genre/controller/GenreController.java`
- [Media controller](https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/media/controller/MediaController.java): `src/main/java/com/app/modules/media/controller/MediaController.java`

### Accounts and auth

- [Authentication](https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/auth/impl/AuthServiceImpl.java): `src/main/java/com/app/modules/auth/impl/AuthServiceImpl.java`
- [User services](https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/user/impl/UserServiceImpl.java): `src/main/java/com/app/modules/user/impl/UserServiceImpl.java`
- [Auth user lookup](https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/user/impl/UserAuthQueryServiceImpl.java): `src/main/java/com/app/modules/user/impl/UserAuthQueryServiceImpl.java`
- [Refresh tokens](https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/refresh_token/impl/RefreshTokenServiceImpl.java): `src/main/java/com/app/modules/refresh_token/impl/RefreshTokenServiceImpl.java`

### Library catalog

- [Book service](https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/book/impl/BookServiceImpl.java): `src/main/java/com/app/modules/book/impl/BookServiceImpl.java`
- [Author service](https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/author/impl/AuthorServiceImpl.java): `src/main/java/com/app/modules/author/impl/AuthorServiceImpl.java`
- [Genre service](https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/genre/impl/GenreServiceImpl.java): `src/main/java/com/app/modules/genre/impl/GenreServiceImpl.java`

### Media management

- [Media operations](https://github.com/rautaruukkipalich/library/tree/master/src/main/java/com/app/modules/media/usecase): `src/main/java/com/app/modules/media/usecase`
- [Upload validation](https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/media/validator/MediaValidationService.java): `src/main/java/com/app/modules/media/validator/MediaValidationService.java`
- [Media processing](https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/media/service/MediaProcessingService.java): `src/main/java/com/app/modules/media/service/MediaProcessingService.java`
- [Metadata extraction](https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/media/metadata/MediaMetadataService.java): `src/main/java/com/app/modules/media/metadata/MediaMetadataService.java`
- [File service](https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/media/service/FileService.java): `src/main/java/com/app/modules/media/service/FileService.java`

### Persistence

- [Postgres repositories](https://github.com/rautaruukkipalich/library/tree/master/src/main/java/com/app/modules): `src/main/java/com/app/modules`
- [Local file storage](https://github.com/rautaruukkipalich/library/blob/master/src/main/java/com/app/modules/media/repository/impl/LocalStorageRepositoryImpl.java): `src/main/java/com/app/modules/media/repository/impl/LocalStorageRepositoryImpl.java`

### Other components

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

## Connections

- API client → Auth controller: calls
- API client → User controller: calls
- API client → Book controller: calls
- API client → Author controller: calls
- API client → Genre controller: calls
- API client → Media controller: calls
- JWT filter → Auth user lookup: looks up user
- Auth controller → Authentication: delegates
- Authentication → User services: uses account
- Authentication → Refresh tokens: manages tokens
- User controller → User services: delegates
- Authentication → Auth user lookup: queries account
- Book controller → Book service: delegates
- Author controller → Author service: delegates
- Genre controller → Genre service: delegates
- Media controller → Media operations: dispatches
- Media operations → Upload validation: validates upload
- Media operations → Media processing: requests processing
- Media operations → File service: manages files
- Media processing → Metadata extraction: reads metadata
- Metadata extraction → File service: reads file details
- File service → Local file storage: reads and writes
- Authentication → Postgres repositories: persists account state
- User services → Postgres repositories: persists users
- Refresh tokens → Postgres repositories: persists tokens
- Book service → Postgres repositories: persists catalog
- Author service → Postgres repositories: persists catalog
- Genre service → Postgres repositories: persists catalog
- Postgres repositories → PostgreSQL: reads and writes
