springshelf
A book tracking and recommendation app inspired by Goodreads. Built with Java Spring Boot, FastAPI (Python ML microservice), Docker, and GitHub Actions. Features will include user authentication via OAuth2, book ratings and reviews, and a recommendation engine. The project documents my learning journey with the Spring ecosystem and event-driven architecture.
Struktura projektu
src/main/java/- backend Spring Boot (REST API + kontrolery stron)src/main/resources/templates/- frontend serwowany przez Thymeleafsrc/main/resources/application.properties- konfiguracja aplikacji i OAuth2
Changelog
[0.3.0] - 2026-03-05
Migracja frontendu do Thymeleaf i uporządkowanie autoryzacji web/API.
Added
- Dodano widoki Thymeleaf:
home,book,bookshelf,login,register,settings,errororaz layout bazowy. - Dodano
PageControllerdo obsługi stron, logowania/rejestracji i akcji półki przez formularze HTML. - Dodano
UserDetailsServiceImplpod logowanie sesyjne (form login).
Changed
- Usunięto stary frontend SPA (
frontend/) oparty o statyczne HTML + JS i token wlocalStorage. - Rozdzielono security na dwa łańcuchy:
/api/**— JWT + stateless,- web (
/**) — sesja + form login + OAuth2. - OAuth2 success flow loguje użytkownika do sesji i przekierowuje na
/. - Zmieniono
GlobalExceptionHandler, aby dla/api/**zwracał JSON, a dla stron webowych renderowałerror.html.
Fixed
- Poprawiono renderowanie elementów zależnych od logowania w szablonach (
sec:authorize). - Naprawiono przypadek błędnej identyfikacji anonimowego użytkownika w
PageController. - Na stronie głównej (
/) osoba niezalogowana nie widzi już akcji+ Dodaj.
[0.2.1] - 2026-03-04
Rozbudowa modelu książki i porządki.
Added
- Nowe pola w modelu
Book:isbn,description,pageCount,genres,tags,rating,ratingsCount,createdAt,updatedAt. - Tabele
book_genresibook_tagsdo filtrowania książek po gatunkach i tagach.
Changed
- Refaktoryzacja
BookService— mapowanie DTO na encję wydzielone do osobnej metodymapRequestToBook(). - Usunięto pole
categoryz modelu (zastąpione przezgenres). - Usunięto
ratingiratingsCountzBookRequest— klient nie może już ustawiać ocen ręcznie.
Fixed
- Naprawiono duplikaty wpisów w
.gitignore. - Usunięto
styles.cssz trackingu gita. - Poprawiono nazwę parametru w setterze
setIsbn().
[0.2.0] - 2026-03-03
Działający prototyp z frontendem.
Added
- Aplikacja ma osobny frontend oparty o Node.js + Tailwind + daisyUI.
- Proste podstrony: base, settings, login, register.
- Backend ma modele książek, książek użytkownika oraz użytkowników.

[0.1.1] - 2026-03-02
Działający prototyp ze Swagger UI.
Added
- Dodałem logowanie oraz rejestrację.
- Dodałem połączenie z GitHubem.
- Dodałem zmienne środowiskowe z profilu
localwapplication-local.properties(.gitignore). - Dodałem autoryzację poprzez tokeny JWT.

[0.1.0] - 2026-03-02
Pierwsza wersja robocza backendu.
Added
- Start projektu Spring Boot 4 + Java 21.
- Konfiguracja połączenia z PostgreSQL.
- Model
Booki repozytoriumBookRepository. - Logika biznesowa w
BookService. - REST API w
BookController(GET,POST,PUT,DELETE). - Walidacja payloadu przez
BookRequest. - Globalny handler błędów (
GlobalExceptionHandler). - Konteneryzacja aplikacji i bazy danych.
Plan na kolejne etapy
- Dodać prosty frontend jako monolit (template'y Thymeleaf).
- Oceny i recenzje książek.
- Serwis rekomendacji (FastAPI + ML).
- CI/CD (GitHub Actions) i testy integracyjne.