Instructions générales
Formation des équipes
Voir cette page pour les détails sur la formation des équipes.
Ce que vous devez remettre
- Uniquement le code source de votre projet (via une branche)
- Aucun diagramme ou documentation n’est demandé
- Les stories demandées doivent être complétées de bout en bout (frontend - backend - BD). Les stories de la remise 2 seront dévoilées après la remise 1. Celles qui sont sur le site sont donc à faire.
⚠️ Attention! Un code qui ne compile pas, ne démarre pas ou pour lequel les tests ne roulent pas obtiendra automatiquement la note de zéro.
Emplacement du code source
- Votre code sera dans un dépôt Gitlab privé (dans le compte du cours), accessible par les enseignants et vos coéquipiers
- Vous ne pouvez pas demander l’ajout d’extensions qui requièrent des accès au niveau de l’organisation Gitlab
- Tous les membres de l’équipe doivent contribuer au projet dans le dépôt Gitlab
- Vous pouvez structurer votre dépôt comme vous voulez (consultez votre TA au besoin)
- Pour la remise, le code devra être mis dans une branche spécifique (voir ci-bas)
Questions pour le client
Toutes les questions pour le client doivent être posées dans le forum dédié sur Discord. Voir cette page.
⚠️ Il est de votre responsabilité de vous tenir à jour avec ce forum. Les réponses du client s’appliquent à tout le monde.
Instructions de remise
- Le code sera automatiquement cloné de Gitlab à la date et à l’heure indiquée
- Uniquement les sources seront clonées. Jamais les binaires (votre
.gitignoreest-il bon et à jour?) - On prélève le code dans la branche
mep⚠️ - L’utilisation de l’IA doit être déclarée dans le README du projet. Voir la section “Utilisation de l’IA” pour les détails.
⚠️ Le nom de la branche doit être exactement mep (ex. : casse).
Aucun accommodement ne sera fait pour corriger une erreur de nom de branche ou le fait que ce n’est pas le bon commit qui est dans la branche.
Contraintes technologies
TL;DR
- IA: frontend à 100%; backend “oui, mais…”
- Frontend: React, Next.js, Vue.js ou Angular, Javascript ou Typescript, npm, port 9090
- Frontend: aucune logique ou validation, doit communiquer avec auberge (port 9091) et consulat (port 9092) via HTTP
- Backend: Java 25, Maven, deux modules Maven (auberge et consulat), communication HTTP entre les deux
- Commandes qui doivent fonctionner pour la correction :
mvn clean install(inclus les tests qui roulent, le checkstyle, etc.)mvn exec:java -pl inn -Dpersistence=memoryou-Dpersistence=sqlitemvn exec:java -pl consulate -Dpersistence=memoryou-Dpersistence=sqlitecd web && npm run devdocker compose up --build
Utilisation de l’IA
Ce sera deux règles distinctes pour l’utilisation de l’IA dans le projet : une pour le frontend, une pour le backend.
⚠️ Vous devez déclarer votre utilisation de l’IA dans le README du projet. Mentionnez brièvement comment il a été utilisé pour le backend (le frontend on le sait déjà), dites lequel vous avez utilisé (Claude, Codex, etc).
Pour le frontend, utilisez l’IA pour tout. Nous ne regarderons même pas ce code, il doit seulement fonctionner avec les règles ci-dessous.
Pour le backend, vous pouvez utiliser l’IA sans problème, mais il vous est fortement recommandé de ne pas faire générer l’ensemble du projet. L’IA reste utile pour répondre à des questions, mais il ne produira pas un code qui répond aux critères du projet (c’est garanti). Vous êtes 100% responsable de la qualité du code du backend.
⚠️ Nous nous réservons le droit de ne pas corriger un backend 100% généré par l’IA. Celui-ci produira inévitablement une quantité ingérable de code d’une qualité douteuse, il n’est donc pas réaliste de demander aux assistants de corriger ligne par ligne.
| Bonne idée de prompt | Mauvaise idée de prompt |
|---|---|
| Aide-moi à terminer la définition des tables pour hibernate | Génère-moi toute la BD |
Ajoute un ExceptionMapper pour les exceptions dans package.domain.mon_truc |
Fais la story 4a |
| Analyse mon découpage en agrégat, qu’en penses-tu? | Change les agrégats du domaine pour faire X |
| Ajoute un linter au projet, et brainstorm avec moi sur les règles qui ne passent pas | Arrange le clean code |
Frontend
Comme mentionné, le frontend doit être 100% généré par l’IA et le code ne sera pas évalué. Il y a tout de même certaines contraintes :
- ⚠️ Aucune logique ou validation dans le frontend. On veut exercer le backend.
- Javascript ou Typescript seulement
- Doit utiliser npm (je sais… ce n’est pas le meilleur, mais il fallait faire un choix)
- Doit utiliser React, Next.js, Vue.js ou Angular seulement (pour le framework, d’autres librairies sont permises)
- Le frontend doit démarrer sur le port 9090 et communiquer avec l’auberge (port 9091) et le consulat (port 9092) via des appels HTTP.
- Le frontend doit suivre l’avancement de votre projet au fil des stories.
- Le projet doit démarrer avec
npm run devet être accessible à l’adressehttp://localhost:9090.
Backend
Un code de base vous sera fourni. Vous êtes libre de le modifier à 100%, et vous pouvez même repartir de 0 si vous préférez. Nous vous recommandons tout de même d’utiliser la même “stack techno”. Vous pouvez ajouter des librairies au besoin, mais nous ne vous recommandons pas de changer de framework (par exemple changer pour Spring Boot). Ce n’est pas illégal, mais ça vient avec des risques, alors veuillez nous consulter avant de le faire.
Le backend doit être écrit en Java et utiliser Maven.
Il y aura au minimum deux modules Maven : un pour l’auberge et un pour le consulat. Ce sera donc deux serveurs indépendants qui communiquent entre eux via HTTP.
Base de données
Votre projet doit pouvoir supporter deux modes de persistance :
- memory: Les données sont stockées en mémoire. Si on redémarre l’application, on perd tout.
- sqlite: Les données sont stockées dans une base de données SQLite. Si on redémarre l’application, les données sont toujours là.
La persistance est choisie au démarrage de l’application avec l’option -Dpersistence=memory ou -Dpersistence=sqlite. Si l’option n’est pas présente, assumez que la persistance est en mémoire. Pour docker, un exemple est déjà donné avec la variable JAVA_OPTS dans le docker-compose.yml.
Afin de partir du bon pied, vous devez absolument avoir lu et fait les exercices de la section Semaine 5: La persistance et le DIP
Quelques suggestions pour la persistance SQLite:
- Vous pouvez utiliser le connecteur JDBC directement, ou Hibernate.
- Le fichier SQLite doit être créé automatiquement s’il n’existe pas (sinon ça ne démarrera pas pour le correcteur).
- Le fichier SQLite ne doit pas être dans les
resourcesde votre projet, mais plutôt dans un dossier à part (attention de supporter les chemins de fichiers Windows/Mac/Linux) - Le fichier SQLite peut être placé dans le dossier temporaire (attention: vous devez supporter Windows/mac/Linux)
- Le schéma de la base de données doit être créé automatiquement au démarrage, s’il n’existe pas.
- Si des données de bases doivent être chargées dans l’application, celles-ci doivent être chargées automatiquement au démarrage (et non une autre commande à exécuter). Prenez également en considération que les données pourraient déjà exister, il ne faut pas les charger en double.
- Pour docker compose, vous devez ajouter votre BD comme volume pour que les données soient persistantes entre les redémarrages du conteneur.