Théo de Romain Édouard pour Kento
Plateforme interne de JUNIA pour la gestion et le partage collaboratif de ressources pédagogiques entre enseignants.
JUNIA est une école d’ingénieurs regroupant de nombreux enseignants, incluant des enseignants-chercheurs internes et des intervenants externes. Actuellement, le partage des ressources pédagogiques entre enseignants présente plusieurs défis :
TREK est une plateforme centralisée permettant aux enseignants de :
┌─────────────────────────────────────────────────────────────┐
│ Frontend │
│ React 18 + TypeScript │
│ Vite + TanStack Router │
└────────────────────────┬────────────────────────────────────┘
│ HTTP/REST
▼
┌─────────────────────────────────────────────────────────────┐
│ Backend │
│ Spring Boot 3.5 + Java 17 │
│ JPA/Hibernate + PostgreSQL + Flyway │
└────────┬─────────────────────────┬──────────────────────────┘
│ │
│ Conversion │ Auth/SSO
▼ ▼
┌──────────────────┐ ┌──────────────────┐
│ Gotenberg │ │ Keycloak │
│ (Office → PDF) │ │ (Auth + Roles) │
└──────────────────┘ └──────────────────┘
│
│ Storage
▼
┌──────────────────┐
│ MinIO / S3 │
│ (Fichiers) │
└──────────────────┘
TREK/
├── backend/ # Backend Spring Boot
│ ├── src/
│ │ ├── main/
│ │ │ ├── java/com/junia/trek/backend/
│ │ │ │ ├── controller/ # API REST endpoints
│ │ │ │ ├── service/ # Logique métier
│ │ │ │ ├── repository/ # JPA repositories
│ │ │ │ ├── entity/ # Entités JPA
│ │ │ │ ├── dto/ # Data Transfer Objects
│ │ │ │ ├── mapper/ # Entity ↔ DTO mappers
│ │ │ │ ├── exception/ # Exceptions custom
│ │ │ │ └── config/ # Configuration Spring
│ │ │ └── resources/
│ │ │ ├── application.properties
│ │ │ └── db/migration/ # Scripts Flyway
│ │ └── test/
│ ├── Dockerfile
│ └── pom.xml
│
├── frontend/ # Frontend React
│ ├── src/
│ │ ├── components/ # Composants React
│ │ ├── routes/ # Routes TanStack Router
│ │ ├── hooks/ # Custom hooks
│ │ ├── services/ # API clients
│ │ └── types/ # Types TypeScript
│ ├── Dockerfile
│ └── package.json
│
├── compose.yml # Docker Compose configuration
├── Taskfile.yml # Commandes task
├── .github/workflows/ # CI/CD GitHub Actions
├── doc/ # Documentation
└── README.md
| Technologie | Version | Usage |
|---|---|---|
| Spring Boot | 3.5.6 | Framework backend |
| Java | 17 | Langage |
| PostgreSQL | 18 | Base de données |
| Flyway | 11.2 | Migration de schéma |
| Apache PDFBox | 3.0.3 | Watermarking PDF |
| Apache Tika | 3.2.3 | Validation fichiers |
| SpringDoc OpenAPI | 2.7.0 | Documentation API (Swagger) |
| Keycloak | 26.0.4 | Authentification et gestion des rôles |
| Gotenberg | 8 | Conversion Office → PDF |
| Technologie | Version | Usage |
|---|---|---|
| React | 18.3 | Framework UI |
| TypeScript | 5.6 | Langage |
| Vite | 6.0 | Build tool + dev server |
| TanStack Router | 1.91 | Routing |
| TanStack Query | 5.62 | State management + cache |
| Tailwind CSS | 3.4 | Styling |
| Technologie | Version | Usage |
|---|---|---|
| Docker/Podman | Latest | Conteneurisation |
| GitHub Actions | - | CI/CD |
| Trivy | 0.33 | Scan de vulnérabilités |
| Husky | 9.1 | Git hooks |
| Commitlint | 19.7 | Validation des commits |
| lint-staged | 15.3 | Linting pré-commit |
| Task | 3.x | Task runner |
Créer une branche depuis main :
git checkout main
git pull
git checkout -b feat/ma-fonctionnalite
Commits conventionnels (obligatoire) :
git commit -m "feat: ajouter la fonctionnalité X"
git commit -m "fix: corriger le bug Y"
git commit -m "docs: mettre à jour le README"
Types autorisés : feat, fix, docs, style, refactor, test, chore, perf, ci, build, revert
Push et Pull Request :
git push origin feat/ma-fonctionnalite
# Créer une PR sur GitHub
Review et merge : Attendre l’approbation et les checks CI/CD avant merge
Pour plus de détails, voir CONTRIBUTING.md
Projet académique - JUNIA (Hauts-de-France School of Engineering)
Développé par des étudiants en 3ème année cycle ingénieur dans le cadre d’un projet de semestre.
Pour toute question ou problème :
Fait avec ❤️ par l’équipe TREK