Commit 08783165 authored by Julien Ait azzouzene's avatar Julien Ait azzouzene
Browse files

🚧 wip: ajout d'ingrédients/tasgs à une recette

(du point de vue du modèle)
parent d0b51680
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -15,6 +15,12 @@ STR_TO_DATE('2023-10-16 17:48:48', '%Y-%m-%d %H:%i:%s'),
'A'
);

INSERT INTO `CUI_UTILISATEUR` (`UTIL_PSEUDO`, `UTIL_MDP`, `UTIL_EMAIL`, `UTIL_NOM`, `UTIL_PRENOM`, `UTIL_DATE_INSCRIPTION`, `UTIL_TYPE`, `UTIL_STATUT`) 
VALUES 
('test', 
'$2y$10$KdMnkhAn385H2QYaQy.DvOa8zTpq0X.RigK3uLKY9k60bwHPUJhGC', 
'test@test.fr', 'Test', 'Jean', '2023-11-05 12:18:13', 'E', 'A');

-- -------TAG------------- --

INSERT INTO CUI_TAG(TAG_INTITULE, TAG_DESCRIPTION)
+36 −4
Original line number Diff line number Diff line
@@ -40,6 +40,16 @@ class IngredientManager extends Manager{
        return $this->ingredientFromLigne($ligne);
    }

    public function getIngredientParNom(string $nom): ?Ingredient{
        $resultat = $this->projectionBdd("select ING_ID, ING_INTITULE, ING_DESCRIPTION from CUI_INGREDIENT where lower(ING_INTITULE) = '$nom'");
        if(empty($resultat)){
            return null;
        }

        $ligne = $resultat[0];
        return $this->ingredientFromLigne($ligne);
    }
        
    /**
     * Renvoie tous les ingredients.
     *
@@ -125,8 +135,19 @@ class IngredientManager extends Manager{
     * @param string $idRecette l'id de la recette
     */
    public function ajouterIngredientARecette(Ingredient $ingredient, string $idRecette){
        //TODO écrire la méthode
        throw new Exception("not implemented yet");
        $ingredientEnBase = self::getIngredientParNom($ingredient->getIntitule());
        if(! $ingredientEnBase){
            self::creerIngredient($ingredient);
            $ingredientEnBase = self::getIngredientParNom($ingredient->getIntitule());
        }

        $requete = 
        "INSERT INTO CUI_COMPOSITION (REC_ID, ING_ID)
        VALUES (?, ?)";

        if(! self::requetePrepare($requete, [$idRecette, $ingredientEnBase->getId()])){
            throw new Exception("échec de l'ajout d'ingrédient");
        }
    }

    /**
@@ -146,8 +167,19 @@ class IngredientManager extends Manager{
     * @param string $idRecette l'id de la recette
     */
    public function supprimerIngredientDeRecette(Ingredient $ingredient, string $idRecette){
        //TODO écrire la méthode
        throw new Exception("not implemented yet");
        $ingredientEnBase = self::getIngredientParNom($ingredient->getIntitule());
        if(! $ingredientEnBase){
            self::creerIngredient($ingredient);
            $ingredientEnBase = self::getIngredientParNom($ingredient->getIntitule());
        }

        $requete = 
        "DELETE FROM CUI_COMPOSITION 
        WHERE REC_ID = ? AND ING_ID = ?";

        if(! self::requetePrepare($requete, [$idRecette, $ingredientEnBase->getId()])){
            throw new Exception("échec de la suppression de l'ingrédient de la recette");
        }
    }

    /**
+67 −2
Original line number Diff line number Diff line
@@ -39,6 +39,26 @@ class RecetteManager extends Manager {
        return new Recette($titre, $contenu, $resume, $image, $statut, $idAuteur, $categorie, $id, $pseudoAuteur, $date_creation, $date_modification);
    }

    private function recetteModifieeFromLigne(array $ligne): RecetteModifiee{
        $id = strval($ligne['REC_ID']);
        $titre = $ligne['REC_MOD_TITRE'];
        $resume = $ligne['REC_MOD_RESUME'];
        $contenu = $ligne['REC_MOD_CONTENU'];
        $image = $ligne['REC_MOD_IMAGE'];
        $date_creation = $ligne['REC_DATE_CREATION'];
        $statut = 'M';
        $categorie = $ligne['CAT_INTITULE'];
        $idAuteur = strval($ligne['UTIL_ID']);
        $pseudoAuteur = $ligne['UTIL_PSEUDO'];

        $date_modification = $ligne['REC_MOD_DATE_MODIFICATION'];
        if(is_null($date_modification)){
            $date_modification = '';
        }

        return new RecetteModifiee($titre, $contenu, $resume, $image, $statut, $idAuteur, $categorie, $id, $pseudoAuteur, $date_creation, $date_modification);
    }

    /**
     * Renvoie une recette en fonction de son id.
     * @param string $id
@@ -67,8 +87,23 @@ class RecetteManager extends Manager {
     * @return ?RecetteModifiee
     */
    public function getRecetteModifiee(string $id) : ?RecetteModifiee{
        //TODO écrire la méthode
        throw new Exception('not implemented yet');
        $requete = 
        "SELECT REC_ID, REC_MOD_TITRE, REC_MOD_CONTENU, REC_MOD_RESUME, REC_MOD_IMAGE, REC_MOD_DATE_MODIFICATION,
        CUI_RECETTE_MODIFIEE.CAT_CODE CAT_CODE, UTIL_ID
        FROM CUI_RECETTE_MODIFIEE
        JOIN CUI_RECETTE USING(REC_ID)
        JOIN CUI_CATEGORIE ON CUI_CATEGORIE.CAT_CODE = CUI_RECETTE_MODIFIEE.CAT_CODE
        JOIN CUI_UTILISATEUR USING (UTIL_ID)
        WHERE rec_id='1'";
        $resultat = self::projectionBdd($requete);
        
        if(! isset($resultat[0])) {
            return null;
        }

        $ligne = $resultat[0];

        return self::recetteModifieeFromLigne($ligne);
    }

    /**
@@ -252,6 +287,36 @@ class RecetteManager extends Manager {
     * @param Recette $recette la recette à supprimer
     */
    public function supprimerRecette(Recette $recette): void{
        //TODO supprimer les tags et ingrédients de la recette modifiée
        
        $recetteModifiee = self::getRecetteModifiee($recette->getId());

        if($recetteModifiee){
            // Suppression des tags et des ingrédients
            foreach($recetteModifiee->getTags() as $tag){
                $recetteModifiee->supprimerTag($tag);
            }

            foreach($recetteModifiee->getIngredients() as $ingredient){
                $recetteModifiee->supprimerIngredient($ingredient);
            }

            // Suppression de la recette modifiée
            $requete = "DELETE FROM CUI_RECETTE_MODIFIEE WHERE REC_ID = ?";
            if(self::requetePrepare($requete, [$recette->getId()]) != 1){
                throw new Exception("Échec de la suppression de la recette.");
            }
        }

        // Suppression des tags et des ingrédients
        foreach($recette->getTags() as $tag){
            $recette->supprimerTag($tag);
        }

        foreach($recette->getIngredients() as $ingredient){
            $recette->supprimerIngredient($ingredient);
        }

        $requete = "DELETE FROM CUI_RECETTE WHERE REC_ID = ?";

        if(self::requetePrepare($requete, [$recette->getId()]) != 1){
+36 −4
Original line number Diff line number Diff line
@@ -41,6 +41,16 @@ class TagManager extends Manager{
        return $this->tagFromLigne($ligne);
    }

    public function getTagParNom(string $nom): ?Tag{
        $resultat = $this->projectionBdd("select TAG_ID, TAG_INTITULE, TAG_DESCRIPTION from CUI_TAG where lower(TAG_INTITULE) = '$nom'");
        if(empty($resultat)){
            return null;
        }

        $ligne = $resultat[0];
        return $this->tagFromLigne($ligne);
    }
        
    /**
     * Renvoie tous les tags.
     *
@@ -127,8 +137,19 @@ class TagManager extends Manager{
     * @param string $idRecette l'id de la recette
     */
    public function ajouterTagARecette(Tag $tag, string $idRecette){
        //TODO écrire la méthode
        throw new Exception("not implemented yet");
        $tagEnBase = self::getTagParNom($tag->getIntitule());
        if(! $tagEnBase){
            self::creerTag($tag);
            $tagEnBase = self::getTagParNom($tag->getIntitule());
        }

        $requete = 
        "INSERT INTO CUI_ETIQUETTAGE (REC_ID, TAG_ID)
        VALUES (?, ?)";

        if(! self::requetePrepare($requete, [$idRecette, $tagEnBase->getId()])){
            throw new Exception("échec de l'ajout de tag");
        }
    }

    /**
@@ -149,8 +170,19 @@ class TagManager extends Manager{
     * @param string $idRecette l'id de la recette
     */
    public function supprimerTagDeRecette(Tag $tag, string $idRecette){
        //TODO écrire la méthode
        throw new Exception("not implemented yet");
        $tagEnBase = self::getTagParNom($tag->getIntitule());
        if(! $tagEnBase){
            self::creerTag($tag);
            $tagEnBase = self::getTagParNom($tag->getIntitule());
        }

        $requete = 
        "DELETE FROM CUI_ETIQUETTAGE 
        WHERE REC_ID = ? AND TAG_ID = ?";

        if(! self::requetePrepare($requete, [$idRecette, $tagEnBase->getId()])){
            throw new Exception("échec de la suppression du tag de la recette");
        }
    }

    /**
+17 −1
Original line number Diff line number Diff line
@@ -10,7 +10,7 @@ function testRecettes() {
    $manager = new RecetteManager();

    $recettes = [];
    $recettes[] = new Recette('Pain au chocolat', 'lorem ipsum dolor sic amet', 'amet sic dolor ipsum lorem', '', 'A', '2', 'Goûter');
    $recettes[] = new Recette('Pain au chocolat', 'lorem ipsum dolor sic amet', 'amet sic dolor ipsum lorem', '', 'V', '2', 'Goûter');
    $manager->creerRecette($recettes[0]);

    $recetteBis = $manager->getDernieresRecettes(1)[0];
@@ -18,5 +18,21 @@ function testRecettes() {
    assertEquals('Pain au chocolat', $recetteBis->getTitre());
    assertEquals('test', $recetteBis->getAuteur()->getPseudo());

    $recetteBis->ajouterIngredient(new Ingredient('chocolat'));

    $ingredients = $recetteBis->getIngredients();

    assertEquals(1, count($ingredients));
    assertEquals('chocolat', $ingredients[0]->getIntitule());

    $recetteBis->ajouterTag(new Tag('viennoiserie'));

    $tags = $recetteBis->getTags();

    assertEquals(1, count($tags));
    assertEquals('viennoiserie', $tags[0]->getIntitule());

    $manager->supprimerRecette($recetteBis);

    assertFalse($manager->getRecette($recetteBis->getId()));
}
 No newline at end of file