{"id":27797804,"url":"https://github.com/michelia5/techacademy-be","last_synced_at":"2026-04-13T15:34:55.471Z","repository":{"id":290526709,"uuid":"963819997","full_name":"Michelia5/TechAcademy-BE","owner":"Michelia5","description":"Applicazione backend REST sviluppata con Java 21 e Spring Boot per la gestione di una scuola post-diploma. Include funzionalità di autenticazione JWT, gestione studenti, docenti e altre entità, esportazione dati (CSV, PDF, Excel) e documentazione Swagger/OpenAPI.","archived":false,"fork":false,"pushed_at":"2025-04-30T08:04:50.000Z","size":159,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-30T09:23:44.390Z","etag":null,"topics":["backend","java","jpa","jwt","maven","postgresql","rest-api","school-management","spring-boot","spring-security","swagger"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Michelia5.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-04-10T08:59:25.000Z","updated_at":"2025-04-30T08:04:56.000Z","dependencies_parsed_at":"2025-04-30T09:23:48.399Z","dependency_job_id":null,"html_url":"https://github.com/Michelia5/TechAcademy-BE","commit_stats":null,"previous_names":["michelia5/progetto-corso-java-be","michelia5/techacademy-be"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Michelia5%2FTechAcademy-BE","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Michelia5%2FTechAcademy-BE/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Michelia5%2FTechAcademy-BE/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Michelia5%2FTechAcademy-BE/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Michelia5","download_url":"https://codeload.github.com/Michelia5/TechAcademy-BE/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251792158,"owners_count":21644531,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backend","java","jpa","jwt","maven","postgresql","rest-api","school-management","spring-boot","spring-security","swagger"],"created_at":"2025-04-30T22:31:57.242Z","updated_at":"2026-04-13T15:34:55.404Z","avatar_url":"https://github.com/Michelia5.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 📛 Tech-Academy\n\n## 🎯 Obiettivo\nRealizzare un'applicazione backend REST in Java con Spring Boot per la gestione di una scuola privata post-diploma. L'app consente di gestire studenti, docenti, corsi, iscrizioni, valutazioni, materiali didattici e autenticazione degli utenti con gestione dei ruoli.\n\n## 🧰 Tecnologie\n- Java 21\n- Spring Boot\n- Spring Data JPA\n- Spring Security + JWT\n- PostgreSQL\n- Lombok\n- JUnit\n- Maven\n- Swagger/OpenAPI\n- Apache POI (per l’export in Excel)\n- OpenPdf (per la generazione del PDF)\n\n## 🏛️ Architettura\nL'applicazione segue il pattern **MVC**:\n- **Model**: rappresentazioni JPA delle entità di dominio.\n- **Repository**: accesso ai dati tramite Spring Data JPA.\n- **Service**: logica applicativa.\n- **Controller**: gestione delle richieste REST.\n\nTutti i livelli sono ben separati. Sono presenti DTO, Mapper, validatori e gestione centralizzata delle eccezioni.\n\n## 🔐 Sicurezza e autenticazione\n- Autenticazione tramite JWT.\n- Autorizzazione basata sui ruoli: `ROLE_ADMIN`, `ROLE_DOCENTE`, `ROLE_STUDENTE`.\n- Endpoints protetti tramite `@PreAuthorize`.\n- Registrazione tramite endpoint dedicato.\n- Collegamento 1:1 tra `AuthUtente` e `Studente` / `Docente`.\n\n## 🚀 Funzionalità principali\n- CRUD completo su:\n    - Studenti\n    - Docenti\n    - Corsi\n    - Aule\n    - Percorsi Formativi\n    - Materiali Didattici\n    - Iscrizioni\n    - Esami\n- Gestione delle iscrizioni con stato (`ATTIVA`, `COMPLETATA`, `RITIRATA`) e voto finale\n- Relazioni complesse (@ManyToOne, @OneToMany, @OneToOne, @ManyToMany)\n\n## 💡 Funzionalità aggiuntive\n- Esportazione CSV:\n    - Studenti\n    - Iscrizioni\n- Esportazione Excel:\n    - Percorsi Formativi con relativi esami\n- Generazione PDF:\n    - Profilo completo dello studente\n- Documentazione interattiva tramite Swagger\n- Dataset iniziale realistico precaricato all'avvio\n- Protezione con JWT e ruoli (docente/studente/admin)\n\n## ✅ Testing\n- Endpoint testabili da Postman\n- Test manuali su login, registrazione, autorizzazione\n- Swagger usato per il test degli endpoint\n- JUnit incluso per test di unità selezionati\n- Sicurezza testata con token JWT validi/non validi\n- Collezione Postman `.json` inclusa nella cartella `/postman` per test degli endpoint.\n\n## ▶️ Avvio del progetto\n1. Clonare il repository\n2. Configurare PostgreSQL (o qualsiasi altro DB) (Nome: `tech-academy`)\n3. Configurare application.properties come descritto di seguito in [Configurazione dell'applicazione](#-configurazione-dellapplicazione)\n4. Avviare l’app Spring Boot (`main`)\n5. Accedere a Swagger: [http://localhost:8080/swagger-ui/index.html](http://localhost:8080/swagger-ui/index.html)\n6. Usare Postman o Swagger per testare le API\n7. (Facoltativo) Eseguire i test unitari:\n```\nmvn test\n```\n\n## ⚙️ Configurazione dell'applicazione\n\nPer eseguire l'applicazione è necessario **creare un file `application.properties`** all’interno di `src/main/resources`.\n\nNel progetto è incluso un file di esempio chiamato `application-example.properties`.  \nPer utilizzarlo:\n\n1. Copia `application-example.properties` come `application.properties`\n2. Compila i valori richiesti (DB, credenziali, JWT):\n\n```properties\n# Database\nspring.datasource.url=jdbc:postgresql://localhost:5432/esame_java\nspring.datasource.username=yourUsername\nspring.datasource.password=yourPassword\n\n# JWT\njwt.secret=InserisciUnaChiaveJWTDiAlmeno32Caratteri\njwt.expirationMs=86400000\n```\n\n## 🧪 Dataset iniziale\nIl caricamento dei dati avviene tramite `DataLoader` e `AuthDataLoader`:\n- 5 Studenti + 3 Docenti\n- 4 Corsi + 3 Percorsi Formativi\n- 3 Aule\n- 4 Esami\n- 4 Materiali Didattici\n- 6 Iscrizioni\n- 1 Admin\n- Utenti già associati a studenti/docenti\n\n## 📐 Design Pattern utilizzati\n- **Builder Pattern**: per creare oggetti entità con `@Builder` di Lombok\n- **Repository Pattern**: con Spring Data JPA\n- **Singleton**: i servizi sono singleton gestiti da Spring\n- **DTO Pattern**: separazione completa tra entità e dati in transito\n- **Exception Handling Centralizzato**: con `@ControllerAdvice` e custom exceptions\n- **Security Pattern**: JWT-based stateless authentication\n\n## 📝 Note finali\n- Tutti gli endpoint sono RESTful e ben documentati.\n- I dati vengono validati nei DTO con annotazioni (`@NotBlank`, `@Email`, ecc.).\n- Ogni entità è testabile da Swagger o Postman.\n- Utenti test disponibili:\n- - Admin: `admin / admin123`\n- - Studente: `luca / luca123`\n- - Docente: `anna / anna123`\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichelia5%2Ftechacademy-be","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmichelia5%2Ftechacademy-be","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichelia5%2Ftechacademy-be/lists"}