Le projet est une API Nest.js et utilise une base de données PostgreSQL avec Prisma.
Note
Si vous avez lancé yarn install à la racine du projet, les dépendances ont déjà été installées.
Installer les dépendances :
yarn installImportant
Les étapes suivantes sont à faire dans tous les cas.
Créer le fichier de variables d’environnement :
cp .env.example .envRemplir les variables d’environnement requises dans le .env :
MAILER_USERetMAILER_PASSWORDpeuvent être générées via https://ethereal.email/ en cliquant sur "Create Ethereal account".GRIST_*,S3_*etAWS_*doivent être demandées en privé.JWT_SECRETpeut être laissé à sa valeur par défaut.DATABASE_SSL=falseest requis pour se connecter à une base de donnée sans SSL (par exemple, une base de développement locale)
Lancer la base de données :
docker run --name confiture-db \
--env POSTGRES_USER=db-user \
--env POSTGRES_PASSWORD=db-password \
--publish 127.0.0.1:5432:5432 \
--detach \
postgres:14Optionnellement, il est possible d’ajouter la variable d’environnement DATABASE_SEEDS pour pré-remplir la base de données avec des comptes utilisateurs dont le format est email:password séparés par une ,. Exemple :
DATABASE_SEEDS="johndoe@email.com:my-secret-password,pierredurand@email.com:my-more-secret-password"Pour lancer la génération des seeds :
yarn db:seedLancer les migrations de la base de données :
yarn migrate:devLancer le serveur local :
yarn start:devTip
On peut aussi utiliser
yarn dev:backdepuis la racine du projet.
La documentation de l’API est disponible sur Swagger (requiert d’avoir lancé le serveur local) : http://localhost:4000/swagger
Chaque route doit définir clairement le type de donnée qu’elle reçoit et renvoie. Cela permet de générer des types qui peuvent être consommé par l’application front.
Pour cela, définir des DTO (data transfer object) pour la requête et pour la réponse (voir le dossier src/audits/dto pour des exemples) et les associer à la route via :
- le décorateur
@Api***Response(@ApiOkResponse,@ApiCreadedResponse, …) - le type du body marqué par
@Body - le type de retour de la méthode
Ci-dessous, un exemple de déclaration de méthode pour une route PUT /some/route qui accepte un corps de requête de type DoSomethingDto et retourne une réponse de type FoobarDto
class MyController {
@Put("/some/route")
// define the response type in the generated types
@ApiOkResponse({ type: FoobarDto })
async doSomething(
// explicitely define the type of the request body, this also enables automatic
// validation and add the schema to the generated types
@Body() body: DoSomethingDto
// explicitely type the return type of the function to make sure we send
// exactly what we want to the client
): Promise<FoobarDto> {
// ...
}
}