Imprimer
Catégorie : R4A.10 - Compléments web (vuejs)
Affichages : 555

Préambule


1°/ Modèle de données

{ "_id" : ObjectId("614ddafcfda4c31dc9299352"), "publicName" : "super dupond", "realName" : "jean dupond", "powers" : [ { "_id" : ObjectId("614ddafcfda4c31dc9299353"), "name" : "super biscottos", "type" : 1, "level" : 75 }, { "_id" : ObjectId("614ddafcfda4c31dc9299354"), "name" : "super ducon", "type" : 6, "level" : 50 } ] }
 
let PowerSchema = new Schema({
  name: {type: String, required: true},
  type: { type: Number, required: true },
  level: {type: Number, required: true}
}
let HeroeSchema = new Schema({
  publicName: {type: String, required: true},
  realName: {type: String},
  powers: [ PowerSchema ],  
});
 
let TeamSchema = new Schema({
  name: {type:String, required:true},
  members: [{type: Schema.Types.ObjectId, ref: 'Heroe'}],
}
let OrganizationSchema = new Schema({
  name: {type:String, required:true},
  secret: {type:String, required:true},
  teams: [{type: Schema.Types.ObjectId, ref: 'Team'}],
}

2°/ l'API

2.1°/ routes pour les héros

2.2°/ route pour les équipes

 

REMARQUE : il n'existe pas de route permettant de récupérer une équipe en particulier avec ses membres. Pour cela, il faut passer par les routes gérant les organisations, en récupérant une organisation en particulier (cf. getbyid), ce qui permet de récupérer la liste des équipes faisant partie de cette organisation, et pour chaque équipe de connaître les ids de leurs membres. Grâce à ces ids, on peut ensuite récupérer chaque héros un par un.

 

2.3°/ routes pour les organisations

3°/ La SPA

3.1°/ Mise en place initiale

3.2°/ Les services

https://apidemo.iut-bm.univ-fcomte.fr/herocorp/orgs/getbyid/65b8affe644c2c12d725b2f9?org-secret=nous%20sommes%20mechants
{"error":0,"status":200,"data":[{"_id":"65b8affe644c2c12d725b2f9","name":"Vilaincorp","secret":"nous sommes mechants","teams":[{"_id":"64762e41ad49469af2af055d","name":"Bastard twins","members":[]},{"_id":"64762e41ad49469af2af0560","name":"Void team","members":["647eec2688e4a2baf7938bfe"]}]}]}

 

3.2°/ Le store

Conseils :

 

3.3°/ Les routes

 

3.4°/ Les fonctionnalités

 

3.4.1°/ Saisie de la phrase secrète

 

3.4.2°/ liste des organisations

 

3.4.3°/ consultation/modification d'une organisation

ATTENTION : Dans l'exemple du TD, toutes les actions du store sont écrites comme étant des fonctions asynchrones (mot-clé async). Cela permet d'attendre le résultat de la requête axios grâce à await. En revanche, cela rend asynchrone l'action elle-même, ce qui veut dire qu'un appel à cette action va se terminer tout de suite, ... sauf si on utilise await devant. Si une action permet de récupérer les informations d'une organisation, que l'on attend pas le résultat avec await et que l'on affiche le composant de consultation d'une organisation, il y a de grande chances que celui-ci considère qu'il n'y a pas d'organisation à afficher et que la boîte de dialogue s'ouvre. Cela sera à tort car c'est simplement la méthode du store qui n'a pas encore reçu la réponse de l'API et mis à jour la variable currentOrg. Il faut donc bien appeler la méthode du store avec await devant, afin d'attendre vraiment le résultat.

 

3.4.4°/ liste des équipes

Remarques :

 

3.4.5°/ consultation/modification d'une équipe et de ses membres.

Remarque : créer un héro se fait indépendamment de toute équipe ou organisation. En revanche, récupérer/modifier un héros ne peut se faire que s'il est dans une équipe affiliée à une organisation. C'est pourquoi la possibilité de modifier un héros se fait dans cette partie de l'application.