Files
nosql/README.md
Awen Lelu e33771883c push node module 'caus lazy
ingnore node_modules, dont't be stupid
2025-12-18 18:51:58 +01:00

99 lines
3.1 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# NoSQL-TPJ1
Maintenant qu'on connaît mieux MongoDB, on va pouvoir le mettre en application dans un environnement qu'on connaît bien, une app Express !
Le but de cet exercice est de gérer une collection de films. MongoDB sera utilisé pour stocker les données.
**Objectifs**
- Initialiser un projet Express avec MongoDB
- Configurer des routes et contrôleurs
- Gérer des opérations CRUD courantes
- Valider les données avant le stockage en BDD
## Tâches
### 1. Initialiser un projet Express + MongoDB
- Mets en place les fichiers de base d'un projet Express (`package.json`, `index.js`, dépendances...).
- Dans un fichier `config/db.js` (par exemple), écris le code permettant de se connecter à une instance MongoDB.
- Crée une base de données MongoDB qui va servir pour ce projet (ex: `mongoflix`)
- Importe les données fournies avec les commandes suivantes :
```sh
# Réalisateurs
mongoimport --db mongoflix --collection directors --file data/directors.bson
# Films
mongoimport --db mongoflix --collection movies --file data/movies.bson
# Critiques
mongoimport --db mongoflix --collection reviews --file data/reviews.bson
```
### 2. CRUD des réalisateurs (directors)
➡️ Mets en place les routes & contrôleurs permettant d'ajouter, récupérer, modifier et supprimer un réalisateur.
> Pense à interroger la base de données pour voir à quoi ressemblent les données des réalisateurs. Pour cela utilise `mongosh` dans le terminal, et fais une requête `find` sur la collection `directors`.
```
POST /directors
GET /directors
GET /directors/:id
PUT /directors/:id
DELETE /directors/:id
```
### 3. CRUD des films (movies)
➡️ Mets en place les routes & contrôleurs permettant d'ajouter, récupérer, modifier et supprimer un film.
> ⚠️ Un film doit être associé à un réalisateur via la propriété `director_id`
```
POST /movies
GET /movies
GET /movies/:id
PUT /movies/:id
DELETE /movies/:id
```
### 4. CRUD des critiques (reviews)
➡️ Mets en place les routes & contrôleurs permettant d'ajouter, récupérer, modifier et supprimer un film.
> ⚠️ Une critique doit être associée à un film via la propriété `movie_id`
```
POST /reviews
GET /reviews
GET /reviews/:id
PUT /reviews/:id
DELETE /reviews/:id
```
### (BONUS) Validation de données avant insertion
➡️ Mets en place une validation de données avant l'insertion des données (contrôleurs des routes `POST` et `PUT`)
> Utilise la librairie `Joi` pour valider les données. Pense à lire la documentation pour orienter tes schémas de validation correctement.
# Installation
download dependencies and create a venv for the project
`uv sync`
# Test
start the database with `docker compose up`
then start the api with the following command:
`uv run fastapi dev test.py`
builting api doc can be found at [](http://localhost:8000/docs)
Data are serilized and validate with pydantic
# Documentation
[fastapi](https://fastapi.tiangolo.com/tutorial/)
[pyMongo](https://www.mongodb.com/docs/languages/python/pymongo-driver/current/crud/#std-label-pymongo-crud)
# Playlist
[hugo tsr](https://files.shobu.fr/media/musics/Hugo%20TSR/Fen%C3%AAtre%20sur%20rue%20(2012)/)