98 lines
3.1 KiB
Markdown
98 lines
3.1 KiB
Markdown
# 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)
|
||
|
||
# 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)/)
|