Aller au contenu principal

34-3 Récupérer tous les projets (find())

  1. Pour récupérer tous les projets en provenance de la base de données, on peut utiliser la méthode find() sur l'entité, à partir du service.
    src/projets/projets.service.ts
    export class ProjetsService {
    async obtenirTous(): Promise<Projet[]> {
    return Projet.find();
    }

    //...
    info

    Profitez-en pour en faire une fonction asynchrone (async) et définir le type de retour (Promise<Projet[]>)

  2. Ensuite, assurez-vous que la fonction findAll du contrôleur appelle bien la fonction du service
    src/projets/projets.controller.ts
    @Get()
    async findAll() {
    return this.projetsService.obtenirTous();
    }
    info

    Assurez-vous d'en faire une fonction asynchrone (async) par la même occasion

  3. Testez avec Postman et vous devriez obtenir votre liste de projets! Imgur

De plus, remarquez dans la console de WebStorm qu'une requête SQL a été générée pour vous en faisant cet appel!

SELECT "Projet"."id" AS "Projet_id", "Projet"."nom" AS "Projet_nom", "Projet"."description" AS "Projet_description", "Projet"."imageUrl" AS "Projet_imageUrl", "Projet"."date_creation" AS "Projet_date_creation", "Projet"."date_modification" AS "Projet_date_modification" FROM "projets" "Projet"

Imgur

Classer par date

Il est possible de passer un objet de paramètres on conditions à la fonction find. Par exemple pour les ordonner en fonction de la date (ORDER BY).

Par exemple:

src/projets/projets.service.ts
export class ProjetsService {
async obtenirTous(): Promise<Projet[]> {
return Projet.find({
order: {
date_creation: 'DESC',
},
});
}

//...

Ce qui donnera cette requête SQL en exécutant une requête avec Postman

SELECT "Projet"."id" AS "Projet_id", "Projet"."nom" AS "Projet_nom", "Projet"."description" AS "Projet_description", "Projet"."imageUrl" AS "Projet_imageUrl", "Projet"."date_creation" AS "Projet_date_creation", "Projet"."date_modification" AS "Projet_date_modification" FROM "projets" "Projet" ORDER BY "Projet"."date_creation" DESC

Et le résultat correspondant dans la réponse Postman;

[
{
"id": 3,
"nom": "Lan Party",
"description": "Organisation du LAN Party",
"imageUrl": null,
"date_creation": "2023-10-24T19:10:40.056Z",
"date_modification": "2023-10-24T19:10:40.056Z"
},
{
"id": 2,
"nom": "Un projet dans Postgres",
"description": "Premier projet",
"imageUrl": null,
"date_creation": "2023-10-23T19:10:40.056Z",
"date_modification": "2023-10-23T19:10:40.056Z"
}
]

Filtrer selon une condition

Vous pouvez aussi facilement filtrer selon une condition. Par exemple, en fonction du nom:

src/projets/projets.service.ts
export class ProjetsService {
async obtenirTous(): Promise<Projet[]> {
return Projet.find({
where: {
nom: 'Lan Party',
},
});
}

//...

Ce qui donnera cette requête SQL en exécutant une requête avec Postman

SELECT "Projet"."id" AS "Projet_id", "Projet"."nom" AS "Projet_nom", "Projet"."description" AS "Projet_description", "Projet"."imageUrl" AS "Projet_imageUrl", "Projet"."date_creation" AS "Projet_date_creation", "Projet"."date_modification" AS "Projet_date_modification" FROM "projets" "Projet" WHERE ("Projet"."nom" = $1) -- PARAMETERS: ["Lan Party"]

Et le résultat correspondant dans la réponse Postman:

[
{
"id": 3,
"nom": "Lan Party",
"description": "Organisation du LAN Party",
"imageUrl": null,
"date_creation": "2023-10-24T19:10:40.056Z",
"date_modification": "2023-10-24T19:10:40.056Z"
}
]

Revenir à la version simple

Pour l'instant, revenez à la version retournant tous les projets:

src/projets/projets.service.ts
export class ProjetsService {
async obtenirTous(): Promise<Projet[]> {
return Projet.find();
}

//...