Semaine 3

Lors de cette séance nous allons:

  • Ajouter 2 tables a notre BDD : Film et Favorite
  • Créer 2 Controlleur : Film et Favorite
Je vous invite à insérer des données dans la table `Films` et `Favorites` pour pouvoir tester votre controlleur.

Nouvelle table en BDD

Vous devrez ajouter 2 tables dans la BDD et donc dans la classe qui hérite de DbContext, voici les champs a mettre dans chacune des deux tables

Films

  • Id : Id dans la base
  • Title : Titre du film
  • Poster : URL de l'image du film (string)
  • Imdb : Id IMDB (string)
  • Year : Date de sorti

Favorites

  • Id : Id dans la base
  • UserId : Id de l'utilisateur à qui le favori appartient
  • FilmId : Id du film en favori

Nouveau controlleur

Vous devrez ajouter 2 controlleur a votre projet, un pour les films et un pour les favoris.

Film

Dans le controlleur Film nous auront besoin de 3 routes:

Une route qui renverra la liste des films stocké en BDD.

GET /api/Film/
Paramètre:
- Aucun
Retourne:
200 - [{"Id": 1, "Title":"Titre du film","Year":"2000","Poster":"https://lien_du_poster.jpg"}, ...]

Une route qui ira chercher les film qui correspondent aux mots clés.

GET /api/Film/search
Paramètre: 
- title : mots clés pour rechercher le film 
Retourne:
200 - [{"Id": 1, "Title":"Titre du film","Year":"2000","Poster":"https://lien_du_poster.jpg"}, ...]
404 - Si aucun film n'a été trouvé

Une route info qui renvoi les films dont les ids correspondent au paramètre passé

GET /api/Film/info
Paramètre: 
- ids : un tableau d'id des films ex: [1,2,3]
Retourne:
200 - [{"Id": 1, "Title":"Titre du film","Year":"2000","Poster":"https://lien_du_poster.jpg"}, ...]
404 - Si aucun film n'a été trouvé
Vous aurez besoin d'utiliser [FromQuery] pour récupérer les paramètres de la requête. Comme il s'agit d'un tableau d'entier, il faut spécifier ou le chercher contrairement a un type simple.
        // GET api/<Film>/info/
        [HttpGet("info")]
        public async Task<ActionResult<IEnumerable<Film>>> GetFilm([FromQuery] int[] ids)

Favoris

Dans le controlleur Favorite nous auront besoin de plusieurs routes:

N'ayant pas de manière de savoir quel utilisateur fait la requête vous utiliserez un id d'utilisateur en dur pour le moment.

Une route qui ajoutera un film dans la table Favorite de la BDD.

POST /api/Favorite/add
Paramètre: 
- id : l'id du film a mettre en favori
Retourne:
200 - Vide // Si tout a fonctionné
404 - Vide // Si le film n'existe pas

Une route qui supprimera un favori dans la table Favorite de la BDD

DELETE /api/Favorite/remove
Paramètre: 
- id : l'id du film a enlever des favoris
Retourne:
200 - Vide // Si tout a fonctionné
404 - Vide // Si le favori n'a pu être supprimé (car il n'existait pas par exemple)

Une route qui renverra la liste des favoris de l'utilisateur

GET /api/Favorite/list/{userId}
Paramètre: 
- Aucun
Retourne:
200 - [1,2,3,8,150] // id des films en favori pour l'utilisateur

Bonus

Faites que la recherche de film fonctionne peu importe la casse des mots clés. (ex: "lord of the rings" et "Lord Of The Rings" renvoi le même résultat)