# eriseve/bibliotekaapp-ui-api architecture

> Architecture diagram of the GitHub repository eriseve/bibliotekaapp-ui-api, 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/eriseve/bibliotekaapp-ui-api
- Repository: https://github.com/eriseve/bibliotekaapp-ui-api

## Overview

BibliotekaApp is a library service for librarians and members: sign in, browse or search books, manage lending, and reserve reading seats. The browser UI calls the gateway; the documented backend is split into authentication, catalog, lending, and seat services, with PostgreSQL storing application data and Eureka providing discovery. UI interactions are traced from the supplied source excerpts. Backend service responsibilities and database/discovery relationships are based on the README and repository structure; where exact routing or service calls are not shown, links are dashed and unverified.

Main entry points: [`LibGateway/src/main/java/org/example/libgateway/controller/FallbackController.java`](https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/LibGateway/src/main/java/org/example/libgateway/controller/FallbackController.java) (API Gateway), [`BibliotekaUI/frontend/src/App.jsx`](https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/BibliotekaUI/frontend/src/App.jsx) (UI Entry and Login), [`BibliotekaUI/frontend/src/components.jsx`](https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/BibliotekaUI/frontend/src/components.jsx) (Shared UI Components), [`BibliotekaUI/frontend/src/api.js`](https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/BibliotekaUI/frontend/src/api.js) (API Client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Browser UI"]
  node_app["UI Entry and Login<br/>[App.jsx]"]
  node_dashboard["Catalog Dashboard<br/>[Dashboard.jsx]"]
  node_bookmodals["Book Actions<br/>[BookModals.jsx]"]
  node_seats["Seat Reservation UI<br/>[Seats.jsx]"]
  node_api["API Client<br/>[api.js]"]
  node_components["Shared UI Components<br/>[components.jsx]"]
  node_theme_toggle["Theme Toggle<br/>[ThemeToggle.jsx]"]
  node_theme["Theme State<br/>[theme.js]"]
end

subgraph group_platform["Access and Discovery"]
  node_gateway["API Gateway"]
  node_eureka["Service Discovery"]
  node_ui_backend["Spring UI Backend"]
  node_auth_client["UI Auth Client<br/>[AuthClient.java]"]
end

subgraph group_domain["Library Services"]
  node_user_service["User and Auth Service"]
  node_library_service["Catalog Service"]
  node_book_service["Catalog Logic<br/>[BookService.java]"]
  node_external_books["External Book Lookup"]
  node_loan_service["Lending Service"]
  node_seat_service["Seat Service"]
end

subgraph group_data["Application Data"]
  node_postgres[("PostgreSQL")]
  node_book_repository["Book Repository"]
  node_loan_repository["Lending Repository"]
  node_seat_repository["Seat Repository"]
  node_user_repository["User Repository"]
end

node_member(("Member / Librarian"))

node_member -->|"uses"| node_app
node_app -->|"submits login"| node_api
node_app -->|"routes to"| node_dashboard
node_app -->|"routes to"| node_seats
node_app -->|"renders"| node_components
node_app -->|"renders"| node_theme_toggle
node_dashboard -->|"requests data"| node_api
node_dashboard -->|"opens"| node_bookmodals
node_dashboard -->|"renders"| node_components
node_bookmodals -->|"submits actions"| node_api
node_bookmodals -->|"renders"| node_components
node_seats -->|"requests reservations"| node_api
node_seats -->|"renders"| node_components
node_components -->|"updates profile"| node_api
node_components -->|"renders"| node_theme_toggle
node_theme_toggle -->|"applies theme"| node_theme
node_api -.->|"HTTP requests"| node_gateway
node_gateway -.->|"discovers services"| node_eureka
node_gateway -.->|"routes requests"| node_ui_backend
node_ui_backend -.->|"delegates auth"| node_auth_client
node_auth_client -.->|"calls auth API"| node_user_service
node_gateway -.->|"routes requests"| node_user_service
node_gateway -.->|"routes requests"| node_library_service
node_gateway -.->|"routes requests"| node_loan_service
node_gateway -.->|"routes requests"| node_seat_service
node_library_service -.->|"delegates catalog"| node_book_service
node_book_service -.->|"reads and writes"| node_book_repository
node_book_service -.->|"looks up books"| node_external_books
node_book_repository -.->|"persists books"| node_postgres
node_loan_service -.->|"reads and writes"| node_loan_repository
node_loan_repository -.->|"persists lending"| node_postgres
node_seat_service -.->|"reads and writes"| node_seat_repository
node_seat_repository -.->|"persists seats"| node_postgres
node_user_service -.->|"reads and writes"| node_user_repository
node_user_repository -.->|"persists users"| node_postgres

click node_app "https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/BibliotekaUI/frontend/src/App.jsx"
click node_dashboard "https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/BibliotekaUI/frontend/src/Dashboard.jsx"
click node_bookmodals "https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/BibliotekaUI/frontend/src/BookModals.jsx"
click node_seats "https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/BibliotekaUI/frontend/src/Seats.jsx"
click node_api "https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/BibliotekaUI/frontend/src/api.js"
click node_components "https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/BibliotekaUI/frontend/src/components.jsx"
click node_theme_toggle "https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/BibliotekaUI/frontend/src/ThemeToggle.jsx"
click node_theme "https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/BibliotekaUI/frontend/src/theme.js"
click node_gateway "https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/LibGateway/src/main/java/org/example/libgateway/controller/FallbackController.java"
click node_eureka "https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/eureka-discovery-server/src/main/java/com/example/eurekadiscoveryserver/EurekaDiscoveryServerApplication.java"
click node_ui_backend "https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/BibliotekaUI/src/main/java/org/example/bibliotekaui/controllers/AuthController.java"
click node_auth_client "https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/BibliotekaUI/src/main/java/org/example/bibliotekaui/feign_client/AuthClient.java"
click node_user_service "https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/user-service/src/main/java/com/example/usermanagementservice/controller/AuthController.java"
click node_library_service "https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/library-management-service/src/main/java/com/example/librarymanagementservice/controller/BookController.java"
click node_book_service "https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/library-management-service/src/main/java/com/example/librarymanagementservice/service/BookService.java"
click node_external_books "https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/library-management-service/src/main/java/com/example/librarymanagementservice/service/ExternalBookService.java"
click node_loan_service "https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/loan-management-service/src/main/java/com/example/loanmanagementservice/controller/LendingController.java"
click node_seat_service "https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/seat-reservation-service/src/main/java/com/example/seatmanagementservice/controller/SeatController.java"
click node_book_repository "https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/library-management-service/src/main/java/com/example/librarymanagementservice/repository/BookRepository.java"
click node_loan_repository "https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/loan-management-service/src/main/java/com/example/loanmanagementservice/repository/LendingRepository.java"
click node_seat_repository "https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/seat-reservation-service/src/main/java/com/example/seatmanagementservice/repository/SeatRepository.java"
click node_user_repository "https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/user-service/src/main/java/com/example/usermanagementservice/repository/UserRepository.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_app,node_dashboard,node_bookmodals,node_seats,node_api,node_components,node_theme_toggle,node_theme toneBlue
class node_gateway,node_eureka,node_ui_backend,node_auth_client toneAmber
class node_user_service,node_library_service,node_book_service,node_external_books,node_loan_service,node_seat_service toneMint
class node_postgres,node_book_repository,node_loan_repository,node_seat_repository,node_user_repository toneRose
class node_member toneIndigo
```

## Components

### Browser UI

- [UI Entry and Login](https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/BibliotekaUI/frontend/src/App.jsx): `BibliotekaUI/frontend/src/App.jsx`
- [Catalog Dashboard](https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/BibliotekaUI/frontend/src/Dashboard.jsx): `BibliotekaUI/frontend/src/Dashboard.jsx`
- [Book Actions](https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/BibliotekaUI/frontend/src/BookModals.jsx): `BibliotekaUI/frontend/src/BookModals.jsx`
- [Seat Reservation UI](https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/BibliotekaUI/frontend/src/Seats.jsx): `BibliotekaUI/frontend/src/Seats.jsx`
- [API Client](https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/BibliotekaUI/frontend/src/api.js): `BibliotekaUI/frontend/src/api.js`
- [Shared UI Components](https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/BibliotekaUI/frontend/src/components.jsx): `BibliotekaUI/frontend/src/components.jsx`
- [Theme Toggle](https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/BibliotekaUI/frontend/src/ThemeToggle.jsx): `BibliotekaUI/frontend/src/ThemeToggle.jsx`
- [Theme State](https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/BibliotekaUI/frontend/src/theme.js): `BibliotekaUI/frontend/src/theme.js`

### Access and Discovery

- [API Gateway](https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/LibGateway/src/main/java/org/example/libgateway/controller/FallbackController.java): `LibGateway/src/main/java/org/example/libgateway/controller/FallbackController.java`
- [Service Discovery](https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/eureka-discovery-server/src/main/java/com/example/eurekadiscoveryserver/EurekaDiscoveryServerApplication.java): `eureka-discovery-server/src/main/java/com/example/eurekadiscoveryserver/EurekaDiscoveryServerApplication.java`
- [Spring UI Backend](https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/BibliotekaUI/src/main/java/org/example/bibliotekaui/controllers/AuthController.java): `BibliotekaUI/src/main/java/org/example/bibliotekaui/controllers/AuthController.java`
- [UI Auth Client](https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/BibliotekaUI/src/main/java/org/example/bibliotekaui/feign_client/AuthClient.java): `BibliotekaUI/src/main/java/org/example/bibliotekaui/feign_client/AuthClient.java`

### Library Services

- [User and Auth Service](https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/user-service/src/main/java/com/example/usermanagementservice/controller/AuthController.java): `user-service/src/main/java/com/example/usermanagementservice/controller/AuthController.java`
- [Catalog Service](https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/library-management-service/src/main/java/com/example/librarymanagementservice/controller/BookController.java): `library-management-service/src/main/java/com/example/librarymanagementservice/controller/BookController.java`
- [Catalog Logic](https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/library-management-service/src/main/java/com/example/librarymanagementservice/service/BookService.java): `library-management-service/src/main/java/com/example/librarymanagementservice/service/BookService.java`
- [External Book Lookup](https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/library-management-service/src/main/java/com/example/librarymanagementservice/service/ExternalBookService.java): `library-management-service/src/main/java/com/example/librarymanagementservice/service/ExternalBookService.java`
- [Lending Service](https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/loan-management-service/src/main/java/com/example/loanmanagementservice/controller/LendingController.java): `loan-management-service/src/main/java/com/example/loanmanagementservice/controller/LendingController.java`
- [Seat Service](https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/seat-reservation-service/src/main/java/com/example/seatmanagementservice/controller/SeatController.java): `seat-reservation-service/src/main/java/com/example/seatmanagementservice/controller/SeatController.java`

### Application Data

- **PostgreSQL**
- [Book Repository](https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/library-management-service/src/main/java/com/example/librarymanagementservice/repository/BookRepository.java): `library-management-service/src/main/java/com/example/librarymanagementservice/repository/BookRepository.java`
- [Lending Repository](https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/loan-management-service/src/main/java/com/example/loanmanagementservice/repository/LendingRepository.java): `loan-management-service/src/main/java/com/example/loanmanagementservice/repository/LendingRepository.java`
- [Seat Repository](https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/seat-reservation-service/src/main/java/com/example/seatmanagementservice/repository/SeatRepository.java): `seat-reservation-service/src/main/java/com/example/seatmanagementservice/repository/SeatRepository.java`
- [User Repository](https://github.com/eriseve/bibliotekaapp-ui-api/blob/main/user-service/src/main/java/com/example/usermanagementservice/repository/UserRepository.java): `user-service/src/main/java/com/example/usermanagementservice/repository/UserRepository.java`

### Other components

- **Member / Librarian**

## Connections

- Member / Librarian → UI Entry and Login: uses (evidence: `BibliotekaUI/frontend/src/App.jsx`)
- UI Entry and Login → API Client: submits login (evidence: `BibliotekaUI/frontend/src/App.jsx`)
- UI Entry and Login → Catalog Dashboard: routes to (evidence: `BibliotekaUI/frontend/src/App.jsx`)
- UI Entry and Login → Seat Reservation UI: routes to (evidence: `BibliotekaUI/frontend/src/App.jsx`)
- UI Entry and Login → Shared UI Components: renders (evidence: `BibliotekaUI/frontend/src/App.jsx`)
- UI Entry and Login → Theme Toggle: renders (evidence: `BibliotekaUI/frontend/src/App.jsx`)
- Catalog Dashboard → API Client: requests data (evidence: `BibliotekaUI/frontend/src/Dashboard.jsx`)
- Catalog Dashboard → Book Actions: opens (evidence: `BibliotekaUI/frontend/src/Dashboard.jsx`)
- Catalog Dashboard → Shared UI Components: renders (evidence: `BibliotekaUI/frontend/src/Dashboard.jsx`)
- Book Actions → API Client: submits actions (evidence: `BibliotekaUI/frontend/src/BookModals.jsx`)
- Book Actions → Shared UI Components: renders (evidence: `BibliotekaUI/frontend/src/BookModals.jsx`)
- Seat Reservation UI → API Client: requests reservations (evidence: `BibliotekaUI/frontend/src/Seats.jsx`)
- Seat Reservation UI → Shared UI Components: renders (evidence: `BibliotekaUI/frontend/src/Seats.jsx`)
- Shared UI Components → API Client: updates profile (evidence: `BibliotekaUI/frontend/src/components.jsx`)
- Shared UI Components → Theme Toggle: renders (evidence: `BibliotekaUI/frontend/src/components.jsx`)
- Theme Toggle → Theme State: applies theme (evidence: `BibliotekaUI/frontend/src/ThemeToggle.jsx`)
- API Client → API Gateway: HTTP requests
- API Gateway → Service Discovery: discovers services
- API Gateway → Spring UI Backend: routes requests
- Spring UI Backend → UI Auth Client: delegates auth
- UI Auth Client → User and Auth Service: calls auth API
- API Gateway → User and Auth Service: routes requests
- API Gateway → Catalog Service: routes requests
- API Gateway → Lending Service: routes requests
- API Gateway → Seat Service: routes requests
- Catalog Service → Catalog Logic: delegates catalog
- Catalog Logic → Book Repository: reads and writes
- Catalog Logic → External Book Lookup: looks up books
- Book Repository → PostgreSQL: persists books
- Lending Service → Lending Repository: reads and writes
- Lending Repository → PostgreSQL: persists lending
- Seat Service → Seat Repository: reads and writes
- Seat Repository → PostgreSQL: persists seats
- User and Auth Service → User Repository: reads and writes
- User Repository → PostgreSQL: persists users
