Ressource

1. Télécharger et lancer le projet

Lancer l’image docker présente dans le Dockerfile : docker compose up

Lancer une fois

  1. Lancer la méthode JpaSpringEnterpriseArchitectureApplication.main() une première fois
  2. Ceci va insérer des données dans la table Article et Client
  3. Dans application.properties modifier spring.sql.init.mode=always en spring.sql.init.mode=never

2. Consignes

Objectif

Apprendre à utiliser les fonctionnalités de base de Spring Data JPA

  • Le code est donné pour l’ensemble des entités JPA
    • l’entité Article qui est dans plusieurs commandes
    • l’entité Client qui a plusieurs commandes
    • l’entité Commande qui a plusieurs articles
erDiagram
    CLIENT ||--o{ COMMANDE : places

    CLIENT {
        bigint id PK
        varchar nom
        varchar email
    }

    COMMANDE {
        bigint id PK
        timestamp created_on
        bigint client_id FK
    }

    ARTICLE {
        bigint id PK
        varchar nom
        double prix
        boolean actif
    }

    COMMANDE_ARTICLE {
        bigint commande_id FK
        bigint article_id FK
    }

    COMMANDE ||--o{ COMMANDE_ARTICLE : links
    ARTICLE ||--o{ COMMANDE_ARTICLE : links

  • Les points d’entrées de notre application sont les Contrôleurs
    • CommandeController qui permet de récupérer / créer / supprimer une commande
    • Les autres Contrôleurs n’ont pas été codés

Créer une commande

Complémenter les classes *Service et *Repository afin de pour créer une nouvelle commande

  • Il faut que tous les articles soient actifs pour créer une commande
curl --request POST \
  --url http://localhost:4545/v1/commandes \
  --header 'content-type: application/json' \
  --data '{
  "clientId": 1,
  "articleIds": [
    4
  ]
}  '

Récupérer toutes les commandes

Faire l’endpoint pour récupérer toutes les commandes

  • on veut également avoir un attribut total qui montre le prix total de la commande

Depuis postman ou votre navigateurs récupérer toutes les commandes

Complément

Dans le application.yml ajoutez spring.jpa.open-in-view=false

Pour résoudre voir Optimisation des lectures