Multi-module library management system with a Spring Boot backend (PostgreSQL) and a JavaFX desktop client.
| Module | Description |
|---|---|
backend/ |
Spring Boot REST API (port 8080) with JPA + PostgreSQL |
common/ |
Shared DTOs used by backend and desktop-client |
desktop/ |
Standalone JavaFX desktop app with JSON file storage |
desktop-client/ |
JavaFX desktop app connecting to the backend REST API |
docker compose up --buildThis starts PostgreSQL and the backend API on port 8080.
API docs: http://localhost:8080/swagger-ui.html
# Start PostgreSQL manually, then:
cd backend
mvn spring-boot:run -Dspring-boot.run.profiles=devcd desktop
mvn javafx:run
# Or double-click: desktop/LibraryManagement.batcd desktop-client
mvn javafx:runmvn clean packagemvn clean package -pl backend -am
mvn clean package -pl desktop -am| Method | Path | Description |
|---|---|---|
| GET | /api/books |
List all books |
| POST | /api/books?title=&author=&copies= |
Add a book |
| GET | /api/users |
List all users |
| POST | /api/users?name=&email= |
Add a user |
| GET | /api/loans |
List all loans |
| GET | /api/loans/active |
List active (unreturned) loans |
| POST | /api/loans/borrow?userId=&bookId=&loanDays= |
Borrow a book |
| POST | /api/loans/return?loanId=&returnDate= |
Return a book |
On first startup, the backend checks if the database is empty and migrates any
existing data from data/books.json, data/users.json, and data/loans.json
into PostgreSQL automatically.
- Backend: Java 21, Spring Boot 3.4, Spring Data JPA, PostgreSQL, Hibernate
- Desktop: JavaFX 25, Jackson 2.17
- Build: Maven multi-module
- Deployment: Docker, Docker Compose