Skip to content

Commit 583009c

Browse files
authored
Merge pull request #8 from CassandraCH/cassandra
Fix problème de synchronisation entre l'affichage et la réponse de l'api de recettes
2 parents 7a75bfa + 0dc993a commit 583009c

2 files changed

Lines changed: 64 additions & 24 deletions

File tree

front-end/src/app/services/recettes.service.ts

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export class RecettesService {
1313
// url vers la bdd (en local pour le moment)
1414
url = 'http://localhost:5500/';
1515

16+
// mot-clé recherché
1617
valRecherche: string;
1718

1819
// tableau avec les recettes de la recherche actuelle
@@ -36,6 +37,7 @@ export class RecettesService {
3637
// permet de récupérer le tableau avec les recettes de la recherche
3738
getTabRecettes(): Recette[]{ return this.tabRecettes; }
3839

40+
3941
// Technique pas optimale mais seule solution trouvée pouravoir des résultats car
4042
// sans faire comme ça, nous avions des problèmes car les données arrivaient trop tard
4143
// vu que les requêtes sont asynchones.
@@ -47,8 +49,9 @@ export class RecettesService {
4749
// Cette technique permet d'éviter de faire trop d'appel à la bdd et trop de
4850
// requêtes à l'api (dont le nombre de requêtes est limité)
4951
getRecettesFromBDD(){
50-
// RECUPERATION DES TOUTES LES DONNEES DANS LA BDD
51-
return this.http.get<any>(this.url).subscribe(
52+
this.viderTableauBDD();
53+
// RECUPERATION DES TOUTES LES DONNEES DANS LA BDD
54+
this.http.get<any>(this.url).subscribe(
5255
(response) => {
5356
this.tableauBDD = response; // copie des données de la bdd
5457
console.log(this.tableauBDD);
@@ -62,6 +65,7 @@ export class RecettesService {
6265
this.viderTableau();
6366
let id = 1;
6467

68+
// Ajout des recettes dans le tableau selon le modèle
6569
res.forEach( (value) => {
6670
let rec: Recette = {
6771
id: id,
@@ -82,7 +86,7 @@ export class RecettesService {
8286
// Recherche dans le tableau avec toutes les données de la bdd
8387
// si le mot-clé recherche est present dans la bdd : on récupère les recettes
8488
// sinon : on fait une requête à l'api
85-
rechercher(motCle: string){
89+
async rechercher(motCle: string){
8690
let trouve = false;
8791
motCle = motCle.toLowerCase();
8892

@@ -100,7 +104,9 @@ export class RecettesService {
100104
if(!trouve) {
101105
console.log("J'ai pas trouvé pour "+motCle+" ==> je demande à l'api");
102106
// this.viderTableau();
103-
this.recupererResultatViaAPI(motCle);
107+
await this.recupererResultatViaAPI(motCle);
108+
// Mise à jour du tableau de la bdd
109+
// this.getRecettesFromBDD();
104110
}
105111
}
106112

@@ -111,6 +117,7 @@ export class RecettesService {
111117
this.enregistrerDansBDD(data);
112118

113119
this.ajouterDansTableau(data['hits']);
120+
114121
}
115122

116123
// Methode qui permet de faire une requete à l'api
@@ -139,6 +146,10 @@ export class RecettesService {
139146
() => { console.log("Enregistrement dans la bdd OK"); },
140147
(err) => { console.log("Erreur de sauvegarde : "+err); }
141148
);
149+
150+
// Mise à jour du tableau de la bdd
151+
this.getRecettesFromBDD();
152+
this.emitRecetteSubject();
142153
}
143154

144155

@@ -157,6 +168,8 @@ export class RecettesService {
157168
// Permet de vide le tableau de recettes (avec le mot-clé actuel)
158169
viderTableau(){ this.tabRecettes = []; }
159170

171+
viderTableauBDD(){ this.tableauBDD = []; }
172+
160173
setValRecherche(valeur: string){ this.valRecherche = valeur; }
161174

162175
getValRecherche(){ return this.valRecherche; }

front-end/src/app/shared/barre-recherche/barre-recherche.component.ts

Lines changed: 47 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,15 @@ export class BarreRechercheComponent implements OnInit, OnDestroy{
1616
messageErreur: string;
1717
recetteSubscription: Subscription;
1818
isDisabled: boolean;
19+
recherche: string = "";
1920

2021
constructor(private recettesService: RecettesService,
2122
private formBuilder: FormBuilder,
2223
private router: Router) { }
2324

2425
ngOnInit(): void {
2526
// Récupération des données stockées dans la bdd
26-
this.recettesService.getRecettesFromBDD();
27+
// this.recettesService.getRecettesFromBDD();
2728
this.initForm();
2829
}
2930

@@ -37,32 +38,43 @@ export class BarreRechercheComponent implements OnInit, OnDestroy{
3738
// Méthode exécutée lors du clic sur le bouton de la barre de recherche
3839
onRecherche(){
3940
// Recupération de la recherche
40-
const recherche = this.rechercheForm.get('recherche').value;
41+
this.recherche = this.rechercheForm.get('recherche').value;
4142

4243
// Vérification que l'utilisateur a saisi quelque chose
43-
if(recherche !== ''){
44-
console.log("Recherche : " + recherche);
45-
this.recettesService.setValRecherche(recherche);
44+
if(this.recherche !== ''){
45+
console.log("Recherche : " + this.recherche);
46+
this.recettesService.setValRecherche(this.recherche);
4647

48+
this.messageErreur = '';
4749
// Recherche dans la bdd ou requete via api si pas de résultat
48-
this.recettesService.rechercher(recherche);
50+
this.recettesService.rechercher(this.recherche).then(
51+
()=>{
52+
this.rediriger(this.recettesService.tabNonVide());
53+
console.log("redirection Ok");
54+
}, (err) => {
55+
console.log("Erreur : "+err);
56+
}
57+
);
58+
59+
// this.recettesService.getRecettesUpdateListener().toPromise().
60+
4961

50-
this.messageErreur = '';
5162

5263
// Si au moins un resultat est obtenu (== tableau non vide)
53-
if(this.recettesService.tabNonVide()){
54-
// redirection vers les resultats de la recherche
55-
this.router.navigate(['/']).then(
56-
() => { this.router.navigate(['/results', recherche]) }
57-
);
58-
}
59-
// cas ou pas de résultat (== tableau vide)
60-
else {
61-
// redirection vers la page 'no-result'
62-
this.router.navigate(['/']).then(
63-
() => { this.router.navigate(['/results', 'no-result']) }
64-
);
65-
}
64+
65+
// if(this.recettesService.tabNonVide()){
66+
// // redirection vers les resultats de la recherche
67+
// this.router.navigate(['/']).then(
68+
// () => { this.router.navigate(['/results', recherche]) }
69+
// );
70+
// }
71+
// // cas ou pas de résultat (== tableau vide)
72+
// else {
73+
// // redirection vers la page 'no-result'
74+
// this.router.navigate(['/']).then(
75+
// () => { this.router.navigate(['/results', 'no-result']) }
76+
// );
77+
// }
6678

6779
// Réinitialisation de la barre de recherche
6880
this.initForm();
@@ -77,6 +89,21 @@ export class BarreRechercheComponent implements OnInit, OnDestroy{
7789

7890
}
7991

92+
rediriger(val: boolean){
93+
if(val){
94+
// redirection vers les resultats de la recherche
95+
this.router.navigate(['/']).then(
96+
() => { this.router.navigate(['/results', this.recherche]) }
97+
);
98+
}
99+
else{
100+
// redirection vers la page 'no-result'
101+
this.router.navigate(['/']).then(
102+
() => { this.router.navigate(['/results', 'no-result']) }
103+
);
104+
}
105+
}
106+
80107
// Bloquer l'accès à plusieurs requêtes pendant 5 secondes
81108
onClick() {
82109
this.isDisabled = true;

0 commit comments

Comments
 (0)