Ga naar de hoofdinhoud

Herhaling

20-12-2023Ongeveer 5 minutenOngeveer 767 woorden

Herhaling

Deze oefeningen kan je gebruiken om te oefenen voor het examen. Ze herhalen en combineren grote delen van de leerstof van de eerste 5 hoofdstukken. Houd er rekening mee dat niet alle details hier herhaald worden. Je kan tijdens het oefenen voor elk hoofdstuk uiteraard nog extra details toevoegen aan onderstaande oefeningen.

Een API bouwen, documenteren en beveiligen met Prisma en Sessions

Vertrek vanaf de startbestanden van de theorie van les 1. De client mag je verwijderen of negeren. Je mag de code van de api map verplaatsen naar de src map als je dat handiger vindt. We voorzien geen seed bestanden, voeg gegevens toe door je eigen create routes, of door de PgAdmin tool te gebruiken. Als je reset verdwijnen alle gegevens, sla eventueel create scriptjes apart op of voeg pas gegevens toe als je schema af is. De docker container kan je opzetten voor de compose.yaml te hergebruiken van les 2. Het ICampus model en de bestanden in de dal folder verwijder je.

Maak 3 tabellen:

  • User:
    • id (automatisch gegenereerde uuid)
    • username (string)
    • password (string)
    • rol (string)
    • blocked (bit default 0)
  • Pizza:
    • id (automatisch gegenereerde uuid)
    • name (string)
    • price (decimaal getal)
    • size (string)
  • Order
    • id (automatisch gegenereerde uuid)
    • date (datetime)

Maak volgende relaties tussen de tabellen:

  • Een order is altijd aan 1 user gekoppeld
  • Een order kan meerdere pizzas bevatten en een pizza kan in meerdere orders voorkomen

Maak een interface IOrderWithPizzaIds die de gegevens van de order bevat en een optionele array met de ids van de pizzas. De array van pizzaIds is optioneel.

Voorzie een route voor de users:

  • Alle CRUD operaties
  • Bij het aanmaken van een gebruiker wordt het wachtwoord geëncrypteerd met pbkdf2 en de rol ingesteld op 'customer'
  • Voorzie in de dal alvast een methode om een gebruiker te zoeken op basis van username, deze wordt voorlopig nog niet gebruikt in de routes

Voorzie een route voor de pizzas:

  • Alle CRUD operaties
  • Bij de getAll moet de gebruiker kunnen zoeken op naam (ook op deel van de naam, niet hoofdletter gevoelig) en op grootte.
  • Voorzie bij het ophalen van alle pizzas een parameter om optioneel ook de orders mee op te halen

Voorzie een route voor de orders:

  • Alle CRUD operaties
  • Een route waarbij de gebruiker de pizzaIds voor een order kan doorgeven en deze koppelt
  • Een route waarbij de gebruiker pizzaIds kan loskoppelen van een order
  • Programmeer in de post route volgende logica: gebruik je interface IOrderWithPizzaIds en wanneer de gebruiker de pizzaIds heeft ingevuld, koppel je die meteen ook in de databank. LET OP: Voor de create in Prisma moet je de pizzaIds verwijderen uit het object.

Voorzie CORS middleware om ervoor te zorgen dat alle requests beschikbaar zijn, behalve de delete (in Postman kan je dit enkel testen door de headers van de OPTIONS request te bekijken).

Voorzie via OpenApi documentatie:

  • Maak een docs en docs.json route. Zorg ervoor dat de index route redirect naar de docs.
  • Documenteer alle requests van de pizzas en pizza route

Maak een tabel Sessions bij aan met volgende velden:

  • id (automatisch gegenereerde uuid)
  • activeFrom (datetime)
  • activeUntil (datetime)

Maak volgende relatie: elke sessie heeft 1 user, een user kan meerdere sessies hebben.

Voorzie op basis van de leerstof van les 5 sessies en cookies om de api te beveiligen. Sessies zijn 3u geldig en werden ververst na 1u.

  • Een gebruiker heeft 2 mogelijke rollen:
    • admin
    • customer

Voorzie een route authenticatie waar je kan inloggen (post) en uitloggen (delete).

Beveilig je routes op volgende manieren:

  • De admin heeft altijd toegang tot alle routes
  • Volgende routes/requests zijn beschikbaar zonder authenticatie:
    • Het aanmaken van een gebruiker
    • Inloggen
    • Het bekijken en zoeken op pizzas
  • Volgende routes zijn enkel beschikbaar voor ingelogde gebruikers:
    • Uitloggen
  • Volgende routes zijn enkel beschikbaar voor een ingelogde customer:
    • Zijn eigen orders ophalen
    • Een bestelling plaatsen voor zijn eigen user
    • Pizzas toevoegen/verwijderen van zijn eigen bestelling
  • Volgende routes zijn enkel beschikbaar voor de admin:
    • Alle user routes, behalve de create
    • Pizzas aanmaken, verwijderen en aanpassen
    • Orders verwijderen
    • Orders bekijken en aanpassen voor alle gebruikers

LET OP: in sommige gevallen kan je de beveiliging niet volledig voorzien via middleware alleen en moet je ook in de request nog extra controles voorzien!

Uitbreiding: Mongoose

Start met een kopie van je project hierboven en wijzig de volledige datalaag naar mongoose.

Uitbreiding: Les 6

Maak de oefening nog eens helemaal opnieuw, maar nu met Prisma.

Uitbreiding: Les 7

Neem de herhalingsoefening en zet je api om naar verschillende serverless functies per route.

Programmeer ook de proxy nog eens opnieuw voor de herhalingsoefening.

Oplossingen

Uitgewerkte oplossingen