Web app di journaling con Spring Boot + Thymeleaf.
Permette di:
- login con GitHub OAuth2 oppure account locale
- creare/modificare/eliminare pensieri (“fusa”) con immagine
- visualizzare un grafico stile GitHub contributions basato sulla costanza giornaliera (
JournalingActivity) - gestire il profilo utente (account page + edit profilo).
Avvia l’app e apri:
http://localhost:8080
Rotte principali:
GET / (home: richiede login)
GET /formlogin (pagina login)
GET /signup (registrazione)
GET /fusa (lista fusa + contribution graph)
GET /account (pagina account)
Endpoint utile per debug:
GET /whoami
- Java 17
- Maven
- Docker (consigliato per Postgres)
- Copia il file
.env.examplein.env:
cp .env.example .env-
Modifica
.envcon le tue credenziali:- Ottieni GitHub OAuth credentials da: https://github.com/settings/developers
- Configura il database PostgreSQL
-
Avvia l'applicazione:
mvn spring-boot:runAssicurati che PostgreSQL sia in esecuzione sulla porta 5434 con il database journalingdb.
Il progetto include docker-compose.yaml con:
- PostgreSQL su
localhost:5434(user/pass:foferys) - pgAdmin su
localhost:5051
docker compose up -dFile: src/main/resources/application.properties
Esempio (da adattare):
spring.datasource.url=jdbc:postgresql://localhost:5434/journalingdb
spring.datasource.username=foferys
spring.datasource.password=foferys
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
spring.security.oauth2.client.registration.github.client-id=TUO_CLIENT_ID
spring.security.oauth2.client.registration.github.client-secret=TUO_CLIENT_SECRETNota: per un repository pubblico è consigliato spostare i segreti in variabili d’ambiente o in un file non versionato (es. application-local.properties).
mvn spring-boot:run-
Auth
- OAuth2 GitHub (
spring-boot-starter-oauth2-client) conCustomOAuth2UserService - login/registrazione locale con password cifrata (BCrypt)
- security config in
WebSecurityConfig(form login + oauth2 + logout).
- OAuth2 GitHub (
-
Fusa (CRUD)
- create/edit/delete sotto
/fusatramiteFusaController - immagini salvate in
src/main/resources/static/images/ - entità
Fusacollegata aUser.
- create/edit/delete sotto
-
Git-style activity graph
JournalingActivityconta quante fusa vengono create in un giorno- render del grafico in
templates/fusa/index.htmlvia JS con livelli 0–4.
-
Account
/account(profile page) +/account/modificautente(edit profilo)- gestione errori password con
PasswordMismatchException.
- config:
WebSecurityConfig,CustomOAuth2User* - controller:
HomeController,FusaController,AccountController,SignupController - models:
User,Fusa,JournalingActivity+ DTO/builder - services:
UserService,FusaService+ repository JPA - templates: pagine Thymeleaf (
formlogin,signup,fusa/*,account/*).
mvn test|
foferys |