Skip to content

Commit 3116933

Browse files
committed
Spring boot example cambio nome progetto "gestione personale"
1 parent 0565be9 commit 3116933

File tree

112 files changed

+738
-480
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

112 files changed

+738
-480
lines changed

Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
FROM openjdk:17-jdk-slim AS builder
33

44
LABEL maintainer="alnao.it"
5-
LABEL description="Sistema Gestione Annotazioni - Build Stage"
5+
LABEL description="Sistema Gestione personale - Build Stage"
66

77
# Installa Maven
88
RUN apt-get update && \
@@ -36,7 +36,7 @@ RUN mvn clean package -DskipTests -B
3636
FROM openjdk:17-jdk-slim AS runtime
3737

3838
LABEL maintainer="alnao.it"
39-
LABEL description="Sistema Gestione Annotazioni - Runtime"
39+
LABEL description="Sistema Gestione personale - Runtime"
4040

4141
# Installa curl per health check
4242
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*

README.md

Lines changed: 33 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
# Sistema di Gestione Annotazioni
1+
# Sistema di Gestione personale
22

33
Progetto sviluppato da < AlNao /> come esempio di progetto con Java Spring Boot.
44

5-
Un sistema di gestione annotazioni multi-modulo basato su Spring Boot che implementa l'architettura esagonale (Hexagonal Architecture) con supporto per deployment sia on-premise che cloud AWS.
5+
Un sistema di gestione personale multi-modulo basato su Spring Boot che implementa l'architettura esagonale (Hexagonal Architecture) con supporto per deployment sia on-premise che cloud AWS.
6+
Prevede
7+
- Una lista di annotazioni
68

79

810
## 📚 Indice rapido
@@ -24,7 +26,7 @@ Un sistema di gestione annotazioni multi-modulo basato su Spring Boot che implem
2426
## 🛠️ Struttura progetto:
2527
Il progetto segue i principi dell'*Hexagonal Architecture* (Ports and Adapters) e si basa su un'architettura a microservizi modulare:
2628
```
27-
📦 annotazioni-parent
29+
📦 progetto
2830
├── 📁 adapter-port # Interfacce e domini (Hexagonal Core)
2931
├── 📁 adapter-api # REST API Controllers
3032
├── 📁 adapter-web # Risorse statiche e configurazioni web
@@ -36,7 +38,7 @@ Caratteristiche:
3638
- **Multi-database**: Supporto per PostgreSQL, MySQL, MongoDB, DynamoDB
3739
- **Multi-ambiente**: Configurazioni separate per AWS e On-Premise
3840
- **Architettura esagonale**: Separazione netta tra business logic e infrastruttura
39-
- **REST API**: Endpoint completi per gestione annotazioni
41+
- **REST API**: Endpoint completi per gestione dei dati
4042
- **Profili Spring**: Attivazione automatica delle implementazioni corrette
4143
- **Transazionalità**: Gestione delle transazioni cross-database
4244
- **Configurazione esterna**: Supporto per variabili d'ambiente
@@ -68,6 +70,10 @@ Prerequisiti:
6870
docker-compose build --no-cache app
6971
docker-compose up
7072
```
73+
Per rimuovere tutto
74+
```bash
75+
docker-compose down --remove-orphans
76+
```
7177
- Esecuzione profilo AWS *coming soon*
7278
```bash
7379
# Profilo AWS
@@ -161,10 +167,10 @@ L'applicazione espone la documentazione interattiva delle API REST tramite Swagg
161167
@Configuration
162168
public class SwaggerConfig {
163169
@Bean
164-
public OpenAPI annotazioniOpenAPI() {
170+
public OpenAPI getsionepersonaleOpenAPI() {
165171
return new OpenAPI()
166-
.info(new Info().title("Sistema di Gestione Annotazioni API")
167-
.description("API per la gestione delle annotazioni, versioning e storico note.")
172+
.info(new Info().title("Sistema di Gestione personale API")
173+
.description("API per la gestione delle personale, versioning e storico note.")
168174
.version("v1.0.0")
169175
.license(new License().name("GPL v3").url("https://www.gnu.org/licenses/gpl-3.0")))
170176
.externalDocs(new ExternalDocumentation()
@@ -173,7 +179,7 @@ L'applicazione espone la documentazione interattiva delle API REST tramite Swagg
173179
}
174180
}
175181
```
176-
- con la possibilità di aggiungere annotazioni OpenAPI ai controller/metodi per arricchire la documentazione.
182+
- con la possibilità di aggiungere dati nelle annotation OpenAPI ai controller/metodi per arricchire la documentazione.
177183
- *Note di sicurezza*: in ambiente di produzione si consiglia di limitare l'accesso a Swagger UI (che dovrebbe essere attivo solo su ambienti di test/sviluppo).
178184
179185
@@ -209,7 +215,7 @@ L'applicazione supporta l'analisi statica del codice, la code coverage e la qual
209215
- **Esecuzione analisi Maven con coverage**:
210216
```bash
211217
mvn clean verify sonar:sonar \
212-
-Dsonar.login=<il-tuo-token> \
218+
-Dsonar.login=sqa_96b98122159fb242ae6b85a0f0ba42d82c41e06d \
213219
-Dsonar.host.url=http://localhost:9000 \
214220
-Ponprem
215221
```
@@ -232,25 +238,25 @@ L'applicazione supporta l'analisi statica del codice, la code coverage e la qual
232238
233239
234240
## 🐳 Deploy e utilizzo con DockerHub
235-
L'immagine ufficiale dell'applicazione è pubblicata su [DockerHub](https://hub.docker.com/r/alnao/annotazioni) e può essere scaricata ed eseguita direttamente, senza necessità di build locale.
241+
L'immagine ufficiale dell'applicazione è pubblicata su [DockerHub](https://hub.docker.com/r/alnao/gestionepersonale) e può essere scaricata ed eseguita direttamente, senza necessità di build locale.
236242
- **Compilazione e push dell'immagine**
237243
```bash
238244
docker login
239-
docker build -t alnao/annotazioni:latest .
240-
docker push alnao/annotazioni:latest
245+
docker build -t alnao/gestionepersonale:latest .
246+
docker push alnao/gestionepersonale:latest
241247
```
242248
oppure lanciare lo script
243249
```bash
244250
./script/push-image-docker-hub.sh
245251
```
246252
- **Pull dell'immagine**:
247253
```bash
248-
docker pull alnao/annotazioni:latest
254+
docker pull alnao/gestionepersonale:latest
249255
```
250256
L'immagine viene aggiornata con le ultime versioni *stabili*.
251257
- **Esecuzione rapida**:
252258
```bash
253-
docker run --rm -p 8080:8080 alnao/annotazioni:latest
259+
docker run --rm -p 8080:8080 alnao/gestionepersonale:latest
254260
```
255261
L'applicazione sarà disponibile su [http://localhost:8080](http://localhost:8080) ma nel sistema devono esserci già installati e ben configuati MongoDb e Postgresql.
256262
- **Esecuzione completa**: 🔌 Rete Docker condivisa (alternativa più robusta)
@@ -397,7 +403,11 @@ L’applicazione e i database posso essere eseguiti anche su Minikube, l’ambie
397403
- **Note**:
398404
- I dati di MongoDB e PostgreSQL sono persistenti grazie ai PVC di Kubernetes, a meno di usare lo script di `stop-all.sh` che rimuove anche i volumi persistenti.
399405
- Viene usata l'immagine `alnao/annotazioni:latest` su dockerHub e non una immagine creata in sistema locale.
400-
406+
- Per rimuovere tutto lo script da lanciare è
407+
```bash
408+
./script/minikube-onprem/stop-all.sh
409+
minikube delete
410+
```
401411
402412
## 🐳 Deploy AWS-onprem (MySQL e DynamoDB Local)
403413
@@ -417,16 +427,6 @@ Per simulare l'ambiente AWS in locale (MySQL come RDS, DynamoDB Local, Adminer,
417427
- Password: `annotazioni_pass`
418428
- Database: `annotazioni`
419429
- **DynamoDB Admin**: [http://localhost:8087](http://localhost:8087)
420-
421-
- Per prova è stato scritto e poi commentato anche un Nginx/Proxy
422-
- Il frontend statico è servito da Nginx su `localhost:8080`.
423-
- Le chiamate API `/api/annotazioni` sono automaticamente proxyate verso il backend Spring Boot su `localhost:8085`.
424-
- Non è necessario modificare `app.js` o la logica frontend: tutte le chiamate API funzionano come in produzione.
425-
- Se modifichi i file statici, riavvia solo il servizio Nginx:
426-
```bash
427-
docker-compose restart nginx
428-
```
429-
- Se la porta 8080 è occupata, puoi cambiare la porta esposta nel servizio Nginx nel `docker-compose.yml`.
430430
- Per vedere i log di un servizio:
431431
```bash
432432
docker-compose logs -f <nome-servizio>
@@ -503,6 +503,7 @@ Questa modalità consente di eseguire l'intero stack annotazioni su AWS ECS con
503503
```bash
504504
./script/aws-ecs/start-all.sh
505505
```
506+
Lo script ci può mettere diversi minuto per la creazione del database aurora e del task ECS!
506507
Lo script esegue in sequenza:
507508
1. **Build e Push ECR**: Compilazione Maven, build Docker, creazione repository ECR e push immagine
508509
2. **IAM Roles**: Creazione Task Role (accesso Aurora/DynamoDB) e Execution Role (logging CloudWatch)
@@ -512,22 +513,22 @@ Questa modalità consente di eseguire l'intero stack annotazioni su AWS ECS con
512513
6. **ECS Deployment**: Creazione cluster, task definition, service con Fargate e auto-scaling
513514
7. **CloudWatch Logs**: Configurazione logging applicativo con retention automatica
514515
8. **Endpoint Discovery**: Rilevamento automatico IP pubblico del task per accesso HTTP
515-
516+
- a volte capita che il task non faccia in tempo a partire e il ritorna l'ip corretto, in questi casi è possibile lanciare lo script
517+
```bash
518+
./script/aws-ecs/check-fargete.sh
519+
```
516520
- Accesso all'applicazione:
517521
- L'output finale dello script mostra l'IP pubblico del task ECS e la porta applicativa (8080)
518522
- Accedi da browser: `http://<TASK_PUBLIC_IP>:8080`
519523
- Endpoint API: `http://<TASK_PUBLIC_IP>:8080/api/annotazioni`
520524
- Swagger UI: `http://<TASK_PUBLIC_IP>:8080/swagger-ui.html`
521525
- Health Check: `http://<TASK_PUBLIC_IP>:8080/actuator/health`
522-
523526
- Monitoring e logs:
524527
```bash
525528
# Verifica stato servizio ECS
526529
aws ecs describe-services --cluster annotazioni-cluster --services annotazioni-service
527-
528530
# Visualizza logs applicazione
529531
aws logs tail /ecs/annotazioni --follow
530-
531532
# Lista task attivi
532533
aws ecs list-tasks --cluster annotazioni-cluster
533534
```
@@ -569,8 +570,10 @@ Questa modalità consente di eseguire l'intero stack annotazioni su AWS ECS con
569570
570571
## 📝 TODO / Roadmap
571572
- ✅ ⚙️ Creazione progetto con maven, creazione dei moduli adapter, adapter web con pagina web di esempio, test generale di esecuzione
572-
- ✅ 🛠️ Funzione di modifica nota con registro con precedenti versioni delle note
573+
- ✅ 📝 Funzione di modifica nota con registro con precedenti versioni delle note
573574
- ✅ 📖 Configurazione di OpenApi-Swagger e Quality-SonarQube, test coverage e compilazione dei moduli
575+
- 🚧 🛠️ Modifica nome dell'applicazione in *gestione personale*
576+
- 🚧 🛠️ Creazione struttura task e aggancio con le annotazioni
574577
- ✅ 🐳 Build e deploy su DockerHub della versione *OnPrem*
575578
- ✅ 🐳 configurazione di docker-compose con MongoDb e Postgresql
576579
- ✅ ☸️ Esecuzione su Kubernetes/Minikube locale con yaml dedicati

adapter-api/pom.xml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,18 @@
66
<modelVersion>4.0.0</modelVersion>
77

88
<parent>
9-
<groupId>it.alnao.annotazioni</groupId>
10-
<artifactId>annotazioni-parent</artifactId>
9+
<groupId>it.alnao.springbootexample</groupId>
10+
<artifactId>springbootexample-parent</artifactId>
1111
<version>1.0.0</version>
1212
</parent>
1313

1414
<artifactId>adapter-api</artifactId>
15-
<name>Annotazioni - API adapter</name>
16-
<description>REST Controllers e DTO per il sistema annotazioni</description>
15+
<name>Gestione Personale - API adapter</name>
16+
<description>REST Controllers e DTO per il sistema gestione personale</description>
1717

1818
<dependencies>
1919
<dependency>
20-
<groupId>it.alnao.annotazioni</groupId>
20+
<groupId>it.alnao.springbootexample</groupId>
2121
<artifactId>adapter-port</artifactId>
2222
</dependency>
2323
<dependency>

adapter-api/src/main/java/it/alnao/annotazioni/api/config/SwaggerConfig.java renamed to adapter-api/src/main/java/it/alnao/springbootexample/api/config/SwaggerConfig.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package it.alnao.annotazioni.api.config;
1+
package it.alnao.springbootexample.api.config;
22

33
import io.swagger.v3.oas.models.ExternalDocumentation;
44
import io.swagger.v3.oas.models.OpenAPI;
@@ -10,10 +10,10 @@
1010
@Configuration
1111
public class SwaggerConfig {
1212
@Bean
13-
public OpenAPI annotazioniOpenAPI() {
13+
public OpenAPI getsionepersonaleOpenAPI() {
1414
return new OpenAPI()
15-
.info(new Info().title("Sistema di Gestione Annotazioni API")
16-
.description("API per la gestione delle annotazioni, versioning e storico note.")
15+
.info(new Info().title("Sistema di Gestione personale API")
16+
.description("API per la gestione personale.")
1717
.version("v1.0.0")
1818
.license(new License().name("GPL v3").url("https://www.gnu.org/licenses/gpl-3.0")))
1919
.externalDocs(new ExternalDocumentation()

adapter-api/src/main/java/it/alnao/annotazioni/api/controller/AnnotazioneController.java renamed to adapter-api/src/main/java/it/alnao/springbootexample/api/controller/AnnotazioneController.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
package it.alnao.annotazioni.api.controller;
1+
package it.alnao.springbootexample.api.controller;
22

33
import io.swagger.v3.oas.annotations.Operation;
44
import io.swagger.v3.oas.annotations.Parameter;
55
import io.swagger.v3.oas.annotations.responses.ApiResponse;
66
import io.swagger.v3.oas.annotations.responses.ApiResponses;
77
import io.swagger.v3.oas.annotations.tags.Tag;
8-
import it.alnao.annotazioni.api.dto.AggiornaAnnotazioneRequest;
9-
import it.alnao.annotazioni.api.dto.AnnotazioneResponse;
10-
import it.alnao.annotazioni.api.dto.CreaAnnotazioneRequest;
11-
import it.alnao.annotazioni.api.mapper.AnnotazioneMapper;
12-
import it.alnao.annotazioni.port.domain.AnnotazioneCompleta;
13-
import it.alnao.annotazioni.port.service.AnnotazioneService;
8+
import it.alnao.springbootexample.api.dto.AggiornaAnnotazioneRequest;
9+
import it.alnao.springbootexample.api.dto.AnnotazioneResponse;
10+
import it.alnao.springbootexample.api.dto.CreaAnnotazioneRequest;
11+
import it.alnao.springbootexample.api.mapper.AnnotazioneMapper;
12+
import it.alnao.springbootexample.port.domain.AnnotazioneCompleta;
13+
import it.alnao.springbootexample.port.service.AnnotazioneService;
1414
import jakarta.validation.Valid;
1515
import org.springframework.beans.factory.annotation.Autowired;
1616
import org.springframework.http.HttpStatus;

adapter-api/src/main/java/it/alnao/annotazioni/api/dto/AggiornaAnnotazioneRequest.java renamed to adapter-api/src/main/java/it/alnao/springbootexample/api/dto/AggiornaAnnotazioneRequest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package it.alnao.annotazioni.api.dto;
1+
package it.alnao.springbootexample.api.dto;
22

33
import jakarta.validation.constraints.NotBlank;
44
import jakarta.validation.constraints.NotNull;

adapter-api/src/main/java/it/alnao/annotazioni/api/dto/AnnotazioneResponse.java renamed to adapter-api/src/main/java/it/alnao/springbootexample/api/dto/AnnotazioneResponse.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package it.alnao.annotazioni.api.dto;
1+
package it.alnao.springbootexample.api.dto;
22

33
import java.time.LocalDateTime;
44
import java.util.UUID;

adapter-api/src/main/java/it/alnao/annotazioni/api/dto/CreaAnnotazioneRequest.java renamed to adapter-api/src/main/java/it/alnao/springbootexample/api/dto/CreaAnnotazioneRequest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package it.alnao.annotazioni.api.dto;
1+
package it.alnao.springbootexample.api.dto;
22

33
import jakarta.validation.constraints.NotBlank;
44
import jakarta.validation.constraints.Size;

adapter-api/src/main/java/it/alnao/annotazioni/api/exception/GlobalExceptionHandler.java renamed to adapter-api/src/main/java/it/alnao/springbootexample/api/exception/GlobalExceptionHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package it.alnao.annotazioni.api.exception;
1+
package it.alnao.springbootexample.api.exception;
22

33
import org.springframework.http.HttpStatus;
44
import org.springframework.http.ResponseEntity;

adapter-api/src/main/java/it/alnao/annotazioni/api/mapper/AnnotazioneMapper.java renamed to adapter-api/src/main/java/it/alnao/springbootexample/api/mapper/AnnotazioneMapper.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
package it.alnao.annotazioni.api.mapper;
1+
package it.alnao.springbootexample.api.mapper;
22

3-
import it.alnao.annotazioni.api.dto.AnnotazioneResponse;
4-
import it.alnao.annotazioni.port.domain.AnnotazioneCompleta;
3+
import it.alnao.springbootexample.api.dto.AnnotazioneResponse;
4+
import it.alnao.springbootexample.port.domain.AnnotazioneCompleta;
55

66
import java.util.List;
77
import java.util.stream.Collectors;

0 commit comments

Comments
 (0)