Skip to content

Commit 32bc0a7

Browse files
committed
Merge branch 'cassandra' into main
2 parents 583009c + 2a19de3 commit 32bc0a7

3 files changed

Lines changed: 106 additions & 124 deletions

File tree

back-end/routes/router.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ router.post('/', (req, res) => {
2929
hits: req.body.hits
3030
});
3131

32-
32+
// le checkKeys => permet d'éviter d'avoir l'erreur "pas de '.' dans une key"
3333
nouveau.save({ checkKeys: false }, (err, docs) => {
3434
if(!err) res.send(docs);
3535
else console.log("Erreur pour créer une nouvelle donnée : "+err);
@@ -52,8 +52,8 @@ router.get('/recettes/:id', (req, res) => {
5252
recette: recette
5353
});
5454
}).catch((error) => {
55-
//Cas où il n'y a pas de résultat
56-
console.log("nous n'avons pas trouvé...");
55+
// sCas où il n'y a pas de résultat
56+
console.log("Je n'ai pas trouvé...");
5757
return res.status(401).json({
5858
message: "Error",
5959
recette: null

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

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export class RecettesService {
2525
private recettesSubject = new Subject<Recette[]>();
2626

2727
emitRecetteSubject() {
28-
// je fais un ... afin de destructurer le tableau
28+
// je fais un ... afin de destructurer le tableau
2929
// renvoyés une copie et non l'original
3030
return this.recettesSubject.next([...this.tabRecettes]);
3131
}
@@ -38,9 +38,9 @@ export class RecettesService {
3838
getTabRecettes(): Recette[]{ return this.tabRecettes; }
3939

4040

41-
// Technique pas optimale mais seule solution trouvée pouravoir des résultats car
42-
// sans faire comme ça, nous avions des problèmes car les données arrivaient trop tard
43-
// vu que les requêtes sont asynchones.
41+
// Technique pas optimale mais seule solution trouvée pour avoir des résultats car
42+
// sans faire comme ça, nous avions des problèmes car les données arrivaient après la mise
43+
// à jour de l'afficahge, vu que les requêtes sont asynchones.
4444
// IDEE : récupérer tout ce qu'il y a de stocké sur la bdd et en faire une
4545
// copie. Lors d'une recherche par l'utilisateur, on vérifie que ce qu'il cherché est
4646
// présent dans le tableau.
@@ -88,11 +88,12 @@ export class RecettesService {
8888
// sinon : on fait une requête à l'api
8989
async rechercher(motCle: string){
9090
let trouve = false;
91+
92+
// toLowerCase permet d'éviter de se préoccuper de la casse
9193
motCle = motCle.toLowerCase();
9294

93-
// si on trouve le mot-clé dans le tableau => on remplit le tableau
95+
// si on trouve le mot-clé dans le tableau => on remplit le tableau avec les données correspondantes
9496
this.tableauBDD.find( ({q, hits}) => {
95-
// toLowerCase permet d'éviter de se préoccuper de la casse
9697
if(q == motCle) {
9798
console.log("J'ai trouvé pour "+motCle);
9899
this.ajouterDansTableau(hits);
@@ -103,21 +104,21 @@ export class RecettesService {
103104
// Si on ne trouve pas dans la bdd => requete à l'api
104105
if(!trouve) {
105106
console.log("J'ai pas trouvé pour "+motCle+" ==> je demande à l'api");
106-
// this.viderTableau();
107107
await this.recupererResultatViaAPI(motCle);
108-
// Mise à jour du tableau de la bdd
109-
// this.getRecettesFromBDD();
110108
}
111109
}
112110

111+
// Permet de récupérer le résultat de la requête à l'api
113112
async recupererResultatViaAPI(motCle: string){
114113
console.log("Appel de l'api en cours...");
115114
const data = await this.requeteApi(motCle);
116-
console.log(data);
115+
// console.log(data);
116+
117+
// Envoyer les données dans la base de données
117118
this.enregistrerDansBDD(data);
118119

120+
// Ajouter les recettes dans le tableau de recettes
119121
this.ajouterDansTableau(data['hits']);
120-
121122
}
122123

123124
// Methode qui permet de faire une requete à l'api
@@ -126,7 +127,7 @@ export class RecettesService {
126127
let APP_KEY = "4f1e59bb1fddf09974a0bb3b33de90d8";
127128

128129
return fetch(`https://api.edamam.com/search?app_id=${APP_ID}&app_key=${APP_KEY}&q=${motCle}`).then(response => {
129-
// Si la réponse est valide (=> renvoi 200) : la requêtes est transformée en json et retournée
130+
// Si la réponse est valide (=> renvoi 200) : la requête est transformée en json et retournée
130131
if ( response.status >= 200 && response.status < 300 ){
131132
return response.json();
132133
}
@@ -136,11 +137,12 @@ export class RecettesService {
136137
}
137138
})
138139
.catch(error => {
139-
alert(error);
140+
// alert(error);
140141
throw new Error('Erreur durant le chargement');
141142
});
142143
}
143144

145+
// Permet de faire un post dans la bdd (ajout d'une nouvelle donnée)
144146
enregistrerDansBDD(data){
145147
this.http.post(this.url, data).subscribe(
146148
() => { console.log("Enregistrement dans la bdd OK"); },
@@ -153,15 +155,14 @@ export class RecettesService {
153155
}
154156

155157

156-
// Renvoi une recette si elle est trouve
158+
// Renvoi une recette si elle est trouve (en fonction de l'id)
157159
getRecetteById(id: number){
158160
const recipe = this.tabRecettes.find(
159161
(r) => { return r.id === id;
160162
});
161163
return recipe;
162164
}
163165

164-
165166
// Vérifie si le tableau de recettes est rempli
166167
tabNonVide() { return (this.tabRecettes.length > 0); }
167168

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

Lines changed: 87 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -11,110 +11,91 @@ import { Subscription } from 'rxjs';
1111
styleUrls: ['./barre-recherche.component.css']
1212
})
1313
export class BarreRechercheComponent implements OnInit, OnDestroy{
14-
15-
rechercheForm: FormGroup;
16-
messageErreur: string;
17-
recetteSubscription: Subscription;
18-
isDisabled: boolean;
19-
recherche: string = "";
20-
21-
constructor(private recettesService: RecettesService,
22-
private formBuilder: FormBuilder,
23-
private router: Router) { }
24-
25-
ngOnInit(): void {
26-
// Récupération des données stockées dans la bdd
27-
// this.recettesService.getRecettesFromBDD();
28-
this.initForm();
29-
}
30-
31-
// Initialisation du formulaire
32-
initForm(){
33-
// Récupération des données stockées dans la bdd
34-
this.recettesService.getRecettesFromBDD();
35-
this.rechercheForm = this.formBuilder.group( { recherche: ['', Validators.required] } );
36-
}
37-
38-
// Méthode exécutée lors du clic sur le bouton de la barre de recherche
39-
onRecherche(){
40-
// Recupération de la recherche
41-
this.recherche = this.rechercheForm.get('recherche').value;
42-
43-
// Vérification que l'utilisateur a saisi quelque chose
44-
if(this.recherche !== ''){
45-
console.log("Recherche : " + this.recherche);
46-
this.recettesService.setValRecherche(this.recherche);
47-
48-
this.messageErreur = '';
49-
// Recherche dans la bdd ou requete via api si pas de résultat
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-
61-
62-
63-
// Si au moins un resultat est obtenu (== tableau non vide)
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-
// }
78-
79-
// Réinitialisation de la barre de recherche
80-
this.initForm();
81-
82-
// On bloque le bouton
83-
this.onClick();
84-
}
85-
// Cas ou le champ de recherche est vide => affichage du message d'erreur
86-
else{
87-
this.messageErreur = "Veuillez saisir quelque chose";
88-
}
89-
90-
}
91-
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-
107-
// Bloquer l'accès à plusieurs requêtes pendant 5 secondes
108-
onClick() {
109-
this.isDisabled = true;
110-
111-
setTimeout(() => {
112-
this.isDisabled = false;
113-
}, 5000);
114-
}
115-
116-
ngOnDestroy(){
117-
// ne pas oublier => sinon, risque de bugs
118-
this.recetteSubscription.unsubscribe();
119-
}
14+
// formulaire (input de la barre de recherche)
15+
rechercheForm: FormGroup;
16+
messageErreur: string;
17+
recetteSubscription: Subscription;
18+
isDisabled: boolean;
19+
recherche: string = "";
20+
21+
constructor(private recettesService: RecettesService,
22+
private formBuilder: FormBuilder,
23+
private router: Router) { }
24+
25+
ngOnInit(): void { this.initForm(); }
26+
27+
// Initialisation du formulaire
28+
initForm(){
29+
// Récupération des données stockées dans la bdd
30+
this.recettesService.getRecettesFromBDD();
31+
this.rechercheForm = this.formBuilder.group( { recherche: ['', Validators.required] } );
32+
}
33+
34+
// Méthode exécutée lors du clic sur le bouton de la barre de recherche
35+
onRecherche(){
36+
// Recupération de la recherche
37+
this.recherche = this.rechercheForm.get('recherche').value;
38+
39+
// Vérification que l'utilisateur a saisi quelque chose
40+
if(this.recherche !== ''){
41+
console.log("Recherche : " + this.recherche);
42+
this.recettesService.setValRecherche(this.recherche);
43+
44+
this.messageErreur = '';
45+
46+
// Recherche dans la bdd ou requete via api si pas de résultat dans la bdd
47+
this.recettesService.rechercher(this.recherche).then(
48+
() => {
49+
// redirection de l'utilisateur sur la bonne page
50+
this.rediriger(this.recettesService.tabNonVide());
51+
}, (err) => {
52+
console.log("Erreur : "+err);
53+
}
54+
);
55+
56+
// Réinitialisation de la barre de recherche
57+
this.initForm();
58+
59+
// On bloque le bouton
60+
this.onClick();
61+
}
62+
// Cas ou le champ de recherche est vide => affichage du message d'erreur
63+
else{
64+
this.messageErreur = "Veuillez saisir quelque chose";
65+
}
66+
67+
}
68+
69+
// Permet de rédiger l'utilisateur soit vers la page de résultats, soit vers la page
70+
// 'no-result'
71+
rediriger(val: boolean){
72+
if(val){
73+
// redirection vers les resultats de la recherche
74+
this.router.navigate(['/']).then(
75+
() => { this.router.navigate(['/results', this.recherche]) }
76+
);
77+
}
78+
else{
79+
// redirection vers la page 'no-result'
80+
this.router.navigate(['/']).then(
81+
() => { this.router.navigate(['/results', 'no-result']) }
82+
);
83+
}
84+
console.log("redirection OK");
85+
}
86+
87+
// Bloquer l'accès à plusieurs requêtes pendant 5 secondes
88+
// Permet de limiter les requêtes à l'api et à la bdd
89+
onClick() {
90+
this.isDisabled = true;
91+
92+
setTimeout(() => {
93+
this.isDisabled = false;
94+
}, 5000);
95+
}
96+
97+
ngOnDestroy(){
98+
// ne pas oublier => sinon, risque de bugs
99+
this.recetteSubscription.unsubscribe();
100+
}
120101
}

0 commit comments

Comments
 (0)