Préambule

Ce troisième TP consiste à transformer le TP 2 pour utiliser une base mongo.

 

1°/ La structure des documents

Comme vu en TD, le passage d'une structure relationnelle à non-relationnelle dans un projet spring nécessite essentiellement de modifier les classes d'entité pour obtenir une structure équivalente à celle de la BdD. Dans le cas présent, on suppose que les documents ont le format suivant :

pour les items : 

{
  _id: ObjectId("abcdef123456789",
  name: "sword",
  price: 1000,
  effect: "S+10",
  category: "weapon"
}

 

pour les shops (item est l'id d'un document dans la collection items, promo indique la promotion en % sur certains items) :

{
  _id: ObjectId("abcdef11111111"),
  name: "la bout tique",
  sellings: [
    { item: ObjectId("abcdef123456789"), stock: 10, promo: 5 },
    { item: ObjectId("abcdef123456788"), stock: 15, promo: 0 },
  ]
}

 

pour les streets (shops est un tableau contenant des ids de documents shop) :

{
  _id: ObjectId("abcdef88884321"),
  name: "rue rale",
  shops: [ ObjectId("abcdef11111111"), ObjectId("abcdef12121212") ]
}

 

2°/ Exercice

L'objectif est de partir des sources du TP 2 et de modifier/créer principalement les classes des entités, DTO et repository afin de :

  • représenter les collections, sachant que pour shops, il faut également une classe pour représenter les sous documents dans sellings.
  • mettre en place une relation grâce à @DocumentReference entre les entités Shop et Item (attention de place l'annotation au bon endroit). L'objectif est que si on récupère une boutique via un repository, on obtient une entité complètement remplie donc avec des objets Item dedans et pas simplement leur id.
  • ne pas utiliser @DocumentReference entre les entité Street et Shop et gérer manuellement leur relation.
  • d'avoir 2 routes dans StreetController pour récupérer les informations d'une rue : soit avec seulement les ids de boutiques, soit avec les informations complètes des boutiques, en utilisant les principes vus en TD et dans la démonstration.
  • garder fonctionnelles les routes déjà définies dans les TP 1 & 2.