Fiche de révision : Questions techniques projet Compawgnon

Plan du Cours

  1. UML - Diagramme de cas d'utilisation
  2. UML - Diagramme de séquence et d'activité
  3. UML - Diagramme de classe
  4. Merise - MCD et MLD
  5. Merise - MPD et base de données
  6. Symfony - Doctrine et services
  7. React et frontend
  8. Architecture et patterns
  9. Tests, CI/CD et déploiement
  10. Sécurité et API

1. UML - Diagramme de cas d'utilisation

Notions clés & Définitions

  • Acteur : Représente un rôle externe qui interagit avec l'application ; dans Compawgnon, les acteurs principaux sont le visiteur, l'utilisateur connecté, le vendeur et l'administrateur.

Points essentiels

★ À maîtriser

  • include représente une action obligatoire incluse dans un cas d'utilisation (ex. réserver nécessite d'être authentifié), tandis que extend représente un comportement optionnel (ex. mot de passe oublié depuis la connexion).

Compléments

  • L'acteur primaire déclenche une action pour atteindre un objectif (ex. l'utilisateur réserve un animal), tandis que l'acteur secondaire aide le système à réaliser l'action (ex. Brevo pour les emails, Google pour l'authentification OAuth).
  • On peut représenter une généralisation entre acteurs : dans Compawgnon, un administrateur est aussi un utilisateur connecté car il peut consulter les annonces et accéder à son compte, mais il possède des droits supplémentaires.

2. UML - Diagramme de séquence et d'activité

Notions clés & Définitions

  • Fragment alt : Un fragment alt représente une alternative, utilisé par exemple pour distinguer les cas « données valides » et « données invalides » lors de l'inscription ou de la création d'une annonce.
  • Ligne de vie : Une ligne verticale pointillée sous un objet qui montre qu'un participant existe pendant le scénario.
  • Barre d'activation : Un rectangle sur une ligne de vie est une barre d'activation qui montre qu'un participant est en train de traiter une action.

Points essentiels

★ À maîtriser

  • Le diagramme d'activité montre le déroulement logique d'un processus, tandis que le diagramme de séquence montre les échanges entre acteurs et composants dans le temps.

Compléments

  • Un message asynchrone est représenté par une flèche à pointe ouverte et signifie que l'émetteur ne bloque pas forcément en attente d'une réponse immédiate.
  • Une décision se représente par un losange, le parallélisme par des barres de synchronisation fork/join, et un merge node est un point de fusion qui regroupe plusieurs chemins alternatifs.
  • Le noeud initial marque le début du processus et le noeud final marque sa fin.

3. UML - Diagramme de classe

Points essentiels

★ À maîtriser

  • L'agrégation est un lien faible où les objets peuvent exister séparément, tandis que la composition est un lien fort où l'objet contenu dépend de l'objet parent.

Compléments

  • Une classe abstraite se représente avec un nom en italique ou le stéréotype abstract.
  • Une multiplicité 0..* signifie zéro ou plusieurs occurrences, comme un vendeur pouvant avoir 0..* animaux.
  • En UML, + signifie public, - privé, # protégé et ~ package.
  • L'héritage en UML se modélise par une flèche avec un triangle blanc vers la classe parente.

4. Merise - MCD et MLD

Notions clés & Définitions

  • Entité : Une entité représente un objet métier important ; dans Compawgnon, les entités principales sont Utilisateur, Vendeur, Animal, Reservation, Avis, Espece et Race.
  • Dépendance fonctionnelle : Une règle où un attribut en détermine un autre, par exemple l'identifiant d'un utilisateur permet de déterminer son email, ses rôles et son statut.

Points essentiels

★ À maîtriser

  • En Merise, 1,1 signifie une participation obligatoire et unique, 0,N signifie optionnelle et multiple, et 1,N signifie au moins une occurrence et potentiellement plusieurs.
  • Pour transformer une relation N-N en MLD, on crée une table de jonction ; dans Compawgnon, la table favorites relie users et animals.
  • Pour transformer une relation 1,N en MLD, on ajoute la clé étrangère du côté N ; dans Compawgnon, animals contient seller_id car un vendeur peut publier plusieurs animaux.

Compléments

  • Pour transformer une relation 1,1 en MLD, on ajoute une clé étrangère unique ; dans Compawgnon, sellers.user_id est une clé étrangère unique vers users.id.
  • Une propriété d'une relation en MLD devient un attribut de la table qui porte la relation, par exemple le message de l'acheteur et la réponse du vendeur sont stockés dans la table reservations.

5. Merise - MPD et base de données

Notions clés & Définitions

  • Index : Accélère les recherches ; dans Compawgnon, les index sur status, seller_id, species_id, city ou created_at améliorent les recherches dans le catalogue, les réservations et l'administration.
  • Clé primaire composite : Une clé primaire composée de plusieurs colonnes ; dans Compawgnon, la table favorites utilise plutôt un id et une contrainte unique user_id + animal_id.
  • Intégrité référentielle : Garantit qu'une clé étrangère référence une ligne existante, par exemple une réservation doit réféférencer un animal, un acheteur et un vendeur existants.
  • Transaction : Un ensemble d'opérations tout-ou-rien, utile dans Compawgnon pour des opérations critiques comme créer une réservation ou appliquer des changements cohérents sur plusieurs entités.

Points essentiels

★ À maîtriser

  • Le MLD décrit la structure logique des tables et relations, tandis que le MPD ajoute les types SQL, index, contraintes et détails propres au SGBD.
  • SQL est relationnel et structuré (utilisé par MySQL pour les données métier de Compawgnon), tandis que NoSQL est plus flexible (MongoDB stocke les messages de conversation sous forme de documents).
  • DELETE CASCADE supprime les lignes liées, tandis que SET NULL conserve la ligne mais vide la clé étrangère.

Compléments

  • On crée un index sur une clé étrangère pour optimiser les jointures et les filtres, par exemple chercher les annonces d'un vendeur via seller_id ou les réservations d'un utilisateur via buyer_id.
  • La convention fréquente pour nommer une clé étrangère est nom_entite_id, par exemple seller_id, animal_id, buyer_id, species_id, breed_id.

6. Symfony - Doctrine et services

Notions clés & Définitions

  • Entité Doctrine : Une classe PHP mappée vers une table SQL ; dans Compawgnon, User, Animal, Seller, Reservation, Review sont des entités Doctrine ORM.
  • Repository : La classe qui centralise les requêtes d'accès aux données ; dans Compawgnon, AnimalRepository contient la recherche filtrée du catalogue avec Doctrine QueryBuilder.
  • Service Symfony : Une classe qui porte une logique réutilisable ; dans Compawgnon, AuthService gère l'inscription et les mots de passe, MailService les emails, UploadService les fichiers, AuditService les logs.
  • Injection de dépendances : Consiste à fournir les dépendances par le constructeur au lieu de les créer dans la classe ; dans AuthService, Symfony injecte l'EntityManager, le hasher de mot de passe, les repositories et le service mail.
  • DTO : (Data Transfer Object) transporte les données d'une requête ; dans Compawgnon, RegisterDTO, ForgotPasswordDTO, ResetPasswordDTO ou les DTO d'annonce permettent de valider les entrées API avant la logique métier.

Points essentiels

★ À maîtriser

  • persist() prépare l'entité à être enregistrée par Doctrine, tandis que flush() exécute réellement les requêtes SQL.
  • Le repository récupère les données, tandis que le service applique les règles métier ; par exemple, AnimalRepository construit les requêtes tandis qu'un service métier vérifie les règles de création ou publication d'annonce.
  • On évite le problème N+1 avec des jointures dans QueryBuilder ; dans AnimalRepository, les requêtes utilisent leftJoin et addSelect pour charger espèce, race, vendeur et média de couverture en une requête maîtrisée.

Compléments

  • Une relation OneToMany se définit avec OneToMany côté parent et ManyToOne côté enfant, par exemple Seller possède plusieurs Animal et chaque Animal référence un Seller.
  • Une relation ManyToMany en Doctrine peut utiliser ManyToMany avec une table de jointure, mais dans Compawgnon les favoris sont gérés explicitement par une entité Favorite pour plus de contrôle.
  • Le système d'événements Symfony fonctionne en déclenchant un événement auquel des listeners réagissent ; dans Compawgnon, JWTCreatedListener enrichit le JWT et AccountDisabledListener bloque les comptes désactivés.
  • Le lazy loading Doctrine charge certaines relations uniquement quand on les utilise, ce qui évite de charger trop de données mais expose au problème N+1.
  • Les migrations Symfony sont gérées avec Doctrine Migrations, versionnent la structure MySQL et sont exécutées en CI ou au déploiement avec doctrine:migrations:migrate.

7. React et frontend

Notions clés & Définitions

  • Virtual DOM : Une représentation en mémoire de l'interface React ; React compare les changements et met à jour efficacement le DOM réel.
  • Custom Hook React : Une fonction use... qui mutualise une logique React ; dans Compawgnon, useAuth ou useAnimalFilters encapsulent la logique d'authentification ou de filtres du catalogue.

Points essentiels

★ À maîtriser

  • Compawgnon utilise Zustand pour l'état d'authentification et TanStack Query pour l'état serveur et le cache des données API.

Compléments

  • JSX permet d'écrire des composants React avec une syntaxe proche du HTML ; dans Compawgnon, les pages Next.js et composants comme LoginForm ou AnimalCard sont écrits en JSX/TSX.
  • Un composant contrôlé est piloté par l'état React ; dans Compawgnon, les formulaires sont gérés avec React Hook Form, qui centralise la gestion des champs et des erreurs de validation.
  • Compawgnon gère les formulaires côté client avec React Hook Form et Zod, en validant les champs côté frontend avant d'appeler l'API Symfony.
  • Dans le flux de données React, le parent transmet des données via les props et l'enfant remonte les actions par événements ou callbacks ; dans Compawgnon, les filtres du catalogue mettent à jour l'URL puis les composants récupèrent les annonces via l'API.
  • Le design responsive est implémenté avec Tailwind CSS, Flexbox/Grid et des classes responsives, adaptant les pages publiques, le catalogue et les espaces compte/vendeur/admin aux écrans mobiles et desktop.
  • Dans Compawgnon, Twig n'est pas utilisé pour rendre les pages principales car le frontend est en Next.js ; Twig sert surtout aux templates d'emails transactionnels comme la réinitialisation de mot de passe.

8. Architecture et patterns

Notions clés & Définitions

  • MVP : La version minimale utile ; pour Compawgnon, il comprend consultation du catalogue, inscription/connexion, réservation, espace vendeur, back-office admin et déploiement.
  • Architecture en couches : Sépare présentation, contrôleurs, logique métier et persistance ; dans Compawgnon : Next.js pour l'interface, Symfony pour l'API, services pour le métier, repositories pour les données, MySQL/MongoDB pour le stockage.
  • API REST : Utilise HTTP, des URL de ressources, des verbes HTTP et JSON ; Compawgnon utilise des routes comme GET /api/animals, POST /api/auth/register, POST /api/me/reservations.
  • SOLID : Regroupe des principes de conception ; dans Compawgnon, le principe de responsabilité unique se voit dans la séparation AuthService, MailService, UploadService, AuditService, et l'injection de dépendances aide au découplage.
  • Pattern Repository : Encapsule l'accès aux données ; dans Compawgnon, AnimalRepository contient les requêtes du catalogue et ChatMessageRepository contient les requêtes MongoDB de messagerie.
  • Dette technique : Le coût futur lié à des choix rapides ; dans Compawgnon, les limites identifiées comme CSP absente, rate limiting à étendre ou cookies HttpOnly non mis en place constituent des points de dette technique.

Points essentiels

★ À maîtriser

  • Un besoin fonctionnel décrit ce que l'application fait (ex. réserver un animal), tandis qu'un besoin non-fonctionnel décrit la qualité attendue (ex. sécurité, performance, responsive design, disponibilité, maintenabilité).

Compléments

  • Le wireframe est une maquette basse fidélité (structure), la maquette est un rendu visuel, et le prototype est une interaction simulée.
  • Un monolithe est une application unique, tandis que les microservices sont plusieurs services indépendants ; Compawgnon est une architecture découplée frontend/backend mais pas une architecture microservices complète.
  • DRY (ne pas répéter la même logique), KISS (garder une solution simple) et YAGNI (ne pas développer ce qui n'est pas nécessaire immédiatement) sont des principes de conception appliqués dans Compawgnon.
  • La normalisation consiste à organiser les données pour éviter les doublons ; dans Compawgnon, les espèces, races, vendeurs, animaux, réservations et avis sont séparés en tables liées par clés étrangères.

9. Tests, CI/CD et déploiement

Notions clés & Définitions

  • Pipeline CI/CD : Une chaîne automatisée de tests, build et déploiement ; dans Compawgnon, GitHub Actions lance le lint, TypeScript, Vitest, PHPUnit, tests d'intégration, puis le CD déploie via SSH sur Hetzner.
  • Mock : Une fausse dépendance utilisée dans un test ; dans Compawgnon, un service d'email peut être mocké pour tester une logique sans envoyer de vrai email.
  • Intégration continue : Consiste à lancer automatiquement les tests à chaque push ou pull request ; dans Compawgnon, la CI vérifie frontend et backend avant fusion.
  • Déploiement continu : Automatise le déploiement après validation ; dans Compawgnon, après merge sur master et succès de la CI, le CD peut déployer sur le serveur Hetzner.
  • Dockerfile : Le fichier qui décrit comment construire une image Docker ; Compawgnon possède des Dockerfiles pour le backend Symfony/FrankenPHP et le frontend Next.js.
  • Docker Compose : Un outil qui orchestre plusieurs conteneurs ; dans Compawgnon, docker-compose.prod.yml lance les services comme frontend, backend, MySQL et MongoDB.
  • Reverse proxy : Un serveur intermédiaire qui reçoit les requêtes et les route vers les services internes ; dans Compawgnon, Caddy/FrankenPHP gère l'exposition HTTP/HTTPS et le service backend.
  • Rollback : Consiste à revenir à une version précédente en cas d'incident ; dans Compawgnon, conserver des versions d'images ou commits stables permettrait un rollback plus rapide.
  • Test end-to-end : Simule un parcours utilisateur complet dans le navigateur ; Compawgnon n'a pas encore de vrais tests E2E Playwright/Cypress, c'est une amélioration possible.

Points essentiels

★ À maîtriser

  • Le test unitaire isole une classe ou fonction, tandis que le test d'intégration vérifie plusieurs composants ensemble ; dans Compawgnon, les tests d'intégration backend utilisent MySQL et MongoDB dans GitHub Actions.

Compléments

  • PHPUnit est l'outil de test PHP utilisé dans le backend Symfony de Compawgnon pour les tests unitaires et d'intégration.
  • On teste un composant React avec React Testing Library et Vitest : on rend le composant, on simule des interactions et on vérifie l'affichage.
  • L'analyse statique analyse le code sans l'exécuter : TypeScript vérifie les types côté frontend et ESLint analyse le code JavaScript/TypeScript.

10. Sécurité et API

Notions clés & Définitions

  • Injection SQL : Consiste à injecter du SQL malveillant dans une entrée utilisateur ; Compawgnon la prévient avec Doctrine ORM, QueryBuilder, setParameter, validations DTO et des tests dédiés.
  • JWT : Un token signé contenant des informations d'authentification ; dans Compawgnon, il contient notamment l'identité, les rôles, le statut utilisateur et éventuellement le statut vendeur.
  • XSS : Consiste à injecter du JavaScript dans une page ; Compawgnon s'appuie sur l'échappement React/Twig et possède des tests ciblés sur les avis publics et les emails transactionnels.
  • CSRF : Force un utilisateur connecté à effectuer une action sans consentement ; Compawgnon étant une API stateless avec JWT et cookies SameSite, le risque est différent d'un site Symfony classique avec sessions serveur.
  • CORS : Contrôle quelles origines web peuvent appeler l'API ; dans Compawgnon, CORS_ALLOW_ORIGIN est configuré pour autoriser le domaine frontend de production.
  • Pagination : Découpe une grande liste en pages ; dans Compawgnon, le catalogue des animaux et les listes admin utilisent des réponses paginées avec page, limit, total, total_pages.
  • Sérialisation Symfony : Transforme des objets PHP en JSON ; dans Compawgnon, les contrôleurs API renvoient des réponses JSON souvent construites via des DTO/transformations pour éviter d'exposer toute l'entité brute.

Points essentiels

★ À maîtriser

  • L'authentification vérifie qui est l'utilisateur, tandis que l'autorisation vérifie ce qu'il a le droit de faire ; dans Compawgnon, JWT authentifie et les rôles ROLE_USER, ROLE_SELLER, ROLE_ADMIN autorisent les accès.
  • PUT remplace une ressource complète, tandis que PATCH modifie partiellement ; dans Compawgnon, les actions comme accepter une réservation ou modifier un profil utilisent plutôt PATCH.
  • Les codes HTTP courants sont 200 succès, 201 créé, 204 pas de contenu, 400 requête invalide, 401 non authentifié, 403 interdit, 404 introuvable, 422 validation, 500 erreur serveur.

Compléments

  • HTTPS chiffre les échanges avec TLS ; Compawgnon utilise HTTPS via Caddy et le domaine DuckDNS, ce qui protège les tokens et données échangées.
  • Le hachage de mot de passe transforme le mot de passe en empreinte non réversible ; dans Compawgnon, UserPasswordHasherInterface hashe les mots de passe avant stockage dans password_hash.

Tableaux de synthèse

Comparaison MLD et MPD

AspectMLDMPD
DéfinitionStructure logique des tables et relationsAjoute types SQL, index, contraintes et détails propres au SGBD
Exemple CompawgnonTables, clés étrangères, clés primairesVARCHAR, JSON, DATETIME, UNIQUE, FK, index

Comparaison des méthodes Agile

AspectScrumKanban
FonctionnementSprints structurésFlux continu
Approche CompawgnonPas utilisée directementTâches à faire, en cours, terminées, corrigées après tests

Pièges & confusions fréquents

  1. Inverser include et extend : include est obligatoire, extend est optionnel.
  2. Inverser agrégation (lien faible) et composition (lien fort).
  3. Penser que persist() enregistre en base : seul flush() exécute les requêtes SQL.
  4. Confondre authentification (qui es-tu) et autorisation (que peux-tu faire).

Checklist Examen

  1. Acteur
  2. Ligne de vie
  3. Entité
  4. Index
  5. Entité Doctrine
  6. Virtual DOM
  7. MVP
  8. Mock
  9. Injection SQL
  10. Fragment alt
  11. Dépendance fonctionnelle
  12. Clé primaire composite
  13. Repository
  14. Custom Hook React
  15. Architecture en couches
  16. Pipeline CI/CD
  17. XSS
  18. Barre d'activation
  19. Intégrité référentielle
  20. Service Symfony

Teste tes connaissances

Teste tes connaissances sur Questions techniques projet Compawgnon avec 30 questions à choix multiples et corrections détaillées.

1. Dans un diagramme de cas d'utilisation UML, que représente un acteur ?

2. Quelle proposition correspond correctement à la signification d'un comportement `include` dans un cas d'utilisation ?

Faire le QCM →

Révisez avec les flashcards

Mémorisez les concepts clés de Questions techniques projet Compawgnon avec 78 flashcards interactives.

Qu'est-ce qu'un acteur en diagramme de cas d'utilisation ?

Un rôle externe qui interagit avec l'application.

Quels sont les acteurs principaux de Compawgnon ?

Le visiteur, l'utilisateur connecté, le vendeur et l'administrateur.

Que signifie « include » dans un cas d'utilisation ?

Une action obligatoire intégrée au cas d'utilisation.

Voir les flashcards →

Cours similaires

Crée tes propres fiches de révision

Importe ton cours et l'IA génère fiches, QCM et flashcards en 30 secondes.

Générateur de fiches