2. Prisma
2. Prisma
We gaan onze api om boeken op te halen verder uitbreiden. We gaan er via Prisma een databank achter stoppen, relaties aanmaken en optionele parameters toevoegen.
API testen met Postman
Je test nog steeds met Postman (zie vorige les). Je kan met Postman makkelijk optionele parameters meegeven.
Opzet
Vertrek van je oefening van vorige les. Indien je deze niet hebt kan je ook van de startbestanden van vorige les vertrekken, houd er rekening mee dat je dan veel opnieuw moet doen en instellen.
Let op: voor de initiële configuratie van Docker heb je de compose.yaml nodig in de startbestanden van de theorie van les 2. Heb je de theorie mooi meegedaan dan moet je hier niets meer voor doen (je hebt dit bestand dan niet per se nodig voor de oefening), heb je dat niet gedaan dan moet je dit stukje van de theorie eerst afwerken voor je begint aan de oefening.
In de startbestanden van deze les vind je de seed scripts terug die je nodig hebt.
Startbestanden
De opzet loopt gelijk aan de theorie, hieronder worden enkel de stappen vermeld, de uitleg ervan check je uiteraard in de theorie.
- Zet de docker container van het voorbeeld aan (open Docker desktop en druk op 'play' in de container OF kopieer de compose.yaml uit de theorie en gebruik de command 'docker compose up')
- Installeer Prisma.
- Maak een prismaClient aan in je dal.
Data layer (schema)
Maak een schema aan waar je de boeken en series alvast toevoegt op basis van de modellen van vorige les (laat de seriesId en author weg, anders kan je fouten krijgen), maak ook een 1 op veel relatie tussen boek en serie (Prisma zal de serieId zelf opnieuw toevoegen). Zorg voor consistent gebruik van hoofdletters en maak zowel de aangemaakte property als FK verplicht.
Maak een nieuwe tabel 'Author' die enkel een id en name heeft. We veronderstellen dat meerdere auteurs aan 1 serie kunnen werken: maak een veel op veel relatie tussen de series en auteurs.
Zorg ervoor dat je voor de URL-kolommen grote strings accepteert (bijvoorbeeld 5000 characters).
Data layer (dal)
Maak in de dal een bestand 'authors.ts' aan. Voorzie alle standaard methodes via prisma (getAll, getById, CRUD). Doe dat daarna ook voor de boeken en series. De oude methodes die info gingen ophalen uit de arrays vervang je dus met methodes die de client van Prisma aanspreken.
API routes aanpassen
Vervang in al je routes de IBook en ISeries met Book en Series uit Prisma en maak al deze methodes async/await zodat je geen errors meer krijgt.
Kopieer de seed scripts uit de startbestanden van de oefeningen naar je Prisma map en voer een migrate en reset uit (voeg de verwijzing naar het script toe in package.json als je dat nog niet gedaan hebt).
API routes uitbreiden
Voorzie bij het ophalen van de series enkele optionele parameters: eentje om de auteurs op te halen en eentje om de boeken op te halen, deze moeten zowel onafhankelijk van elkaar werken als samen (EN/OF). Doe dat zowel voor het ophalen van alle series als van 1 serie op id. De volgorde waarin de parameters staan mag niet uitmaken. Uitbreiding: zorg ervoor dat je geen copy-paste code hebt en voorzie een herbruikbare interface voor de optionele parameters en een herbruikbare helper om strings naar booleans te converteren.
Voorzie bij het ophalen van alle boeken een parameter om te zoeken op een deel van de titel van boek. Zorg ervoor dat deze parameter genegeerd wordt als deze meegegeven wordt als lege string (het resultaat zou hetzelfde zijn, maar je mag er niet op zoeken als het een lege string is omdat dit onnodig de databank belast). Uitbreiding: de zoekstring is standaard hoofdlettergevoelig, zorg ervoor dat deze niet hoofdlettergevoelig is voor deze opdracht.
Uitbreiding
Indien je nog enkele extra zaken wil oefenen mag je 1 of meerdere van volgende opties uitwerken:
- Extra parameters om op te zoeken (kies gerust zelf welke)
- Bij de series een optie toevoegen om enkel de naam van de boeken en/of auteurs terug te geven
- Een serie kunnen toevoegen waarbij boeken en/of auteurs meegegeven zijn
- Alle boeken van 1 serie ophalen
- Alle boeken ophalen die in een van de series zitten waar een bepaalde auteur aan meewerkt.
- Een extra tabel ontwerpen, deze toevoegen aan Prisma, aan het seed script en aan je dal + er enkele routes op voorzien (neem een backup van het seedscript voor je er aanpassingen in doet!)
- Een combinatie van bovenstaande
Je mag uiteraard ook zelf een leuke uitbreiding verzinnen.