Slopify
In deze opdracht bouw je de Slopify muziekstreamingapp verder uit. Je start vanuit de map slopify_starter en zorgt ervoor dat de applicatie volledig functioneel wordt.
Werk uitsluitend in de map slopify_starter. Wijzig geen bestanden in de map slopify.
Situatie
De starter bevat al:
een werkende Express-server in
index.tseen databestand
data.tsmet 22 nummers en helperfuncties. Hier moet niets aangepast worden.TypeScript-types in
types.tsstatische HTML-bestanden in
views/(zonder dynamische data)een CSS-bestand in
public/css/style.css
Partials
Zorg ervoor dat de bovenkant van de html (html tag tot en met de body tag) in een header partial geplaatst wordt en gebruik deze op de nodige plaatsen.
Zorg ervoor dat de aside in een aside partial geplaatst wordt en gebruik deze in de
songensongsejs file.Zorg dervoor dat de onderkant van de html in een footer partial geplaatst wordt en gebruik deze op de nodige plaatsen.
Songs overview (/songs)
Zorg ervoor dat de query parameters
q,sortFieldensortDirectioncorrect worden opgevraagd. Voorzie een default waarde als deze niet zijn opgegeven.Als
sortFieldnietowned,titleofpublish_dateis, geef dan een error bericht "Invalid sort field" terug met als status code 400.Als
sortDirectionnietascofdescis, geef dan een error bericht "Invalid sort direction" terug met als status code 400.gebruik de
getSongs()functie van de data module, om de songs op te vragen. Deze functie geeft een promise terug, dus hou hier rekening mee.gebruik de
getCurrentUser()om de huidige gebruiker op te vragen. Deze functie geeft een promise terug, dus hou hier rekening mee. Hij geeft altijd dezelfde gebruikt terug.Geef al deze gegevens door aan de
ejstemplate.Pas de ejs template aan zodat deze gebruik maakt van de
songsarray om desong-cardelementen te tonen. Zorg dat alle hardcoded waarden zijn vervangen door de echte waarden van desong.
Songs detail (/songs/:id)
Lees de route parameter
iduitRoep de
getSongById(id)functie aan hetdata.tsbestand met de juiste id. Deze functie geeft een promise terug, dus hou hier rekening mee.Vraag de huidige gebruiker op aan de hand van de
getCurrentUser()functie.Als er geen
songmet deze id gevonden is, toon de 404 pagina.Geef de
songen decurrentUsermee aan de ejs template.Pas de
song.ejstemplate aan zodat deze de informatie uit de doorgegevensonggebruikt.
Buy Song (/buy)
Toon het aantal credits van de
currentUserin deasidebalk.Lees de
iduit de body van de POST requestIndien
ideen getal is, roep debuySongfunctie aan en redirect de gebruiker vervolgens terug naar de/songspagina.Als je te weinig coins hebt om een song te kopen stuur je de gebruiker naar de
billingpage en toon je een foutmelding.Zorg ervoor dat de knop om te kopen enkel zichtbaar is als het
ownedveld van song op true staat. Anders toon je<div class="badge-owned">Owned</div>
Billing Page (/billing)
Haal de
amountuit de body van de POST requestKijk na of de amount een getal is en groter is dan 0
Gebruik de
addCreditsmethode van dedata.tsmodule om de credits toe te voegen.Indien er iets misloopt moet je een fout bericht tonen bovenaan de billing page.
Indien het succesvol is moet er geredirect worden naar
/songs
Laatst bijgewerkt