arrow-left

Alle pagina's
gitbookPowered by GitBook
1 van 6

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Milestone 1 - Terminal App

hashtag
Interfaces

Maak een apart bestand aan waarin je de interfaces definieert voor de data die je hebt aangemaakt. Zorg ervoor dat alle interfaces zijn geexporteerd zodat je ze kan gebruiken in andere bestanden.

hashtag
Console App

Maak een console app aan die de data uit je json file inleest en deze op een overzichtelijke manier weergeeft in de console. Zorg ervoor dat je aan de hand van een menu de gebruiker de mogelijkheid geeft om de data te filteren op een id. Als de gebruiker een id ingeeft die niet bestaat in de data, geef je een gepaste melding.

De applicatie kan er als volgt uitzien:

hashtag
Inzenden

Zorg ervoor dat je alles pushed naar je repository en de link naar je repository inzendt via digitap. De deadline vind je op digitap.

Welcome to the JSON data viewer!

1. View all data
2. Filter by ID
3. Exit

Please enter your choice: 1

- Aether Knight (FTC-001)
- Shadow Enchantress (FTC-002)
- ...
Welcome to the JSON data viewer!

1. View all data
2. Filter by ID
3. Exit

Please enter your choice: 2
Please enter the ID you want to filter by: FTC-001

- Aether Knight (FTC-001)
  - Description: A legendary knight who harnesses the ethereal powers of the Aether, wielding them to maintain balance across the realms.
  - Age: 457
  - Active: true
  - Birthdate: 1567-03-05
  - Image: https://example.com/images/aether-knight.jpg
  - Rarity: Legendary
  - Abilities: Teleportation, Energy Manipulation, Dimensional Travel
  - Element: Aether
  - Guild: Order of the Cosmic Veil
    - Name: Order of the Cosmic Veil
    - Guild Master: Celestial Mage
    - Emblem: https://example.com/images/guilds/cosmic-veil-emblem.jpg
    - Founded: 1423
    - Motto: Balance in All, All in Balance

Milestone 4 - Security

  • Bij het opstarten van de applicatie voeg je twee default gebruikers toe: een admin en een user. Zorg ervoor dat de wachtwoorden van deze gebruikers veilig worden opgeslagen (hint: bcrypt). De admin gebruiker heeft een ADMIN role en de user een USER role.

  • Voeg een login pagina toe aan de applicatie. De login pagina moet toegankelijk zijn voor iedereen. De login pagina moet een form bevatten met twee input velden: username en password. De login pagina moet ook een knop bevatten om het formulier te versturen.

  • Zorg ervoor dat de gebruiker na het inloggen wordt doorgestuurd naar het overzicht je dashboard dat je in vorige milestones hebt gemaakt.

  • Zorg ervoor dat de gebruiker niet bij de login pagina kan komen als hij al is ingelogd. Als de gebruiker al is ingelogd en hij gaat naar de login pagina, dan moet hij worden doorgestuurd naar het dashboard.

  • Zorg ervoor dat de gebruiker niet bij de dashboard pagina kan komen als hij niet is ingelogd. Als de gebruiker niet is ingelogd en hij gaat naar het dashboard, dan moet hij worden doorgestuurd naar de login pagina.

  • Alleen een ADMIN gebruiker mag de edit button zien op de dashboard pagina. Je kan dit doen door de button te verbergen voor de USER role. Zorg er ook voor dat de pagina zelf niet toegankelijk is voor de USER role.

  • Zorg ervoor dat de gebruiker zich ook kan uitloggen. Voeg een logout knop toe aan de dashboard pagina. Als de gebruiker op de logout knop klikt, dan moet hij worden uitgelogd en worden doorgestuurd naar de login pagina.

  • Zorg ervoor dat een gebruiker ook kan registreren. Dit moet gewoon een eenvoudige pagina zijn met een form met twee input velden: username en password. Als de gebruiker het formulier invult, dan moet hij worden geregistreerd en worden doorgestuurd naar de login pagina. Kijk ook of de gebruikersnaam al bestaat in de database. Als de gebruikersnaam al bestaat, geef dan een foutmelding. Zorg ervoor dat het wachtwoord veilig wordt opgeslagen.

  • Zorg dat je applicatie wordt gehosted op een cloud provider naar keuze en dus je applicatie online is te bezoeken. Voeg de link toe aan je README.md bestand.

Milestone 0 - JSON

hashtag
JSON Aanmaken

We gaan een json bestand nodig hebben dat we gaan gebruiken als basis van een API. Iedereen mag zelf beslissen welke soort data hij/zij in het bestand steekt. Het is wel belangrijk dat het bestand aan een aantal voorwaarden voldoet:

  • Het bestand moet een array van objecten bevatten (minimum 10).

  • Elk object moet minstens de volgende soort properties bevatten :

  • Een id property met een unieke waarde.

  • Property met een korte string als waarde: Dit kan bijvoorbeeld een naam zijn.

  • Property met een lange string als waarde: Dit kan bijvoorbeeld een beschrijving zijn.

  • Property met een number als waarde: Dit kan bijvoorbeeld de leeftijd zijn.

  • Property met een boolean als waarde: Dit kan aangeven of iemand bijvoorbeeld een actieve status heeft.

  • Property met een datum als waarde: Dit kan de geboortedatum zijn.

  • Property met een image URL als waarde: Dit kan de URL van een profielfoto zijn.

  • Property waarvan de waarde een string is met een beperkt aantal mogelijke waarden.

  • Property met een array van strings als waarde: Dit kunnen bijvoorbeeld hobby's zijn.

  • Property met een ander object als waarde. Dit object moet op zijn beurt ook een aantal properties bevatten

    • Een id met een unieke waarde

    • Een aantal properties (mogen string, booleans, numbers, image url, ...)

Let op dat dit een minimale vereiste is. Je mag gerust meer properties toevoegen als dat nodig is voor je idee.

circle-info

Zorg vooral voor realistische data. Images kunnen eenvoudig worden gegenereerd via Gemini of ChatGPT.

Voorbeelden:

Fantasy Card Game

Music artists

hashtag
JSON Hosten

We gaan github gebruiken voor ons JSON bestand te hosten. Hoewel github gebruikt wordt kunnen we dit ook gebruiken om bestanden in op te slaan en publiekelijk te hosten (in beperkte mate)

  • Maak een nieuwe github repository aan en zet deze publiek.

  • Je kan deze clonen of gewoon via de web interface de bestanden toevoegen.

  • Upload je image bestanden naar github (of push deze naar je repository)

Je mag uiteraard zelf ook hosting voorzien voor je json bestand en images. Zorg er gewoon voor dat je json publiekelijk beschikbaar is en je images.

hashtag
Interessante links

Semester 2

Milestone 3 - MongoDB

hashtag
Data naar MongoDB schrijven

Zorg ervoor dat je alle data dat je via de fetch API ophaalt in MongoDB naar mongoDB schrijft. Kijk bij de opstart van de applicatie altijd eerst of er data in de database zit. Als er geen data in de database zit, dan moet je de data ophalen via de fetch API en in de database schrijven. Als er data inzit gebruik je de data die afkomstig is uit de MongoDB database.

hashtag
Data ophalen uit MongoDB

Zorg ervoor dat alle endpoints worden aangepast zodat de data uit de MongoDB database wordt gehaald ipv de data die je via de fetch API ophaalt.

hashtag
Edit functionaliteit

Zorg ervoor dat je de edit functionaliteit implementeert. Dit betekent dat je een item kan aanpassen. Je hoeft alleen maar de hoofd entiteit te kunnen aanpassen. Dus in het voorbeeld van de TradingCards moet je enkel de Trading Cards kunnen aanpassen en niet de gerelateerde Guilds.

Je mag zelf kiezen welke velden je wil aanpassen. Zorg ervoor dat je minstens 4 velden kan aanpassen. Er moet minstens 1 keer een veld zijn dat een select element gebruikt.

Als het formulier wordt ingediend, dan moet de data worden aangepast in de MongoDB database.

Dit object is afkomstig van een 2de json bestand.
Update de image urls in je json file zodat deze naar github urls wijzen. Zorg zeker dat je de raw url gebruikt als image url. Bv: https://raw.githubusercontent.com/similonap/fake-gpt/main/images/chatbot.pngarrow-up-right
  • Upload je json naar github (of push deze naar je repository)

  • ChatGPTarrow-up-right
    Geminiarrow-up-right
    https://perchance.org/ai-text-to-image-generatorarrow-up-right
    cards.json
    [
      {
        "id": "FTC-001",
        "name": "Aether Knight",
        "description": "A legendary knight who harnesses the ethereal powers of the Aether, wielding them to maintain balance across the realms.",
        "age": 457,
        "isActive": true,
        "birthDate": "1567-03-05",
        "imageUrl": "https://example.com/images/aether-knight.jpg",
        "rarity": "Legendary",
        "abilities": ["Teleportation", "Energy Manipulation", "Dimensional Travel"],
        "element": "Aether",
        "guildAffiliation": {
          "id": "GUILD-009",
          "name": "Order of the Cosmic Veil",
          "guildMaster": "Celestial Mage",
          "guildEmblemUrl": "https://example.com/images/guilds/cosmic-veil-emblem.jpg",
          "foundedYear": 1423,
          "motto": "Balance in All, All in Balance"
        }
      },
      {
        "id": "FTC-002",
        "name": "Shadow Enchantress",
        "description": "A mysterious sorceress cloaked in darkness, wielding shadow magic to manipulate the fabric of reality and ensnare her foes.",
        "age": 324,
        "isActive": false,
        "birthDate": "1699-10-31",
        "imageUrl": "https://example.com/images/shadow-enchantress.jpg",
        "rarity": "Epic",
        "abilities": ["Shadow Manipulation", "Illusion Casting", "Night Vision"],
        "element": "Shadow",
        "guildAffiliation": {
          "id": "GUILD-015",
          "name": "Brotherhood of the Dusk",
          "guildMaster": "Darkness Wielder",
          "guildEmblemUrl": "https://example.com/images/guilds/dusk-brotherhood-emblem.jpg",
          "foundedYear": 1578,
          "motto": "In Shadows, Truth"
        }
      }
    ]
    guilds.json
    [
      {
        "id": "GUILD-009",
        "name": "Order of the Cosmic Veil",
        "guildMaster": "Celestial Mage",
        "guildEmblemUrl": "https://example.com/images/guilds/cosmic-veil-emblem.jpg",
        "foundedYear": 1423,
        "motto": "Balance in All, All in Balance"
      },
      {
        "id": "GUILD-015",
        "name": "Brotherhood of the Dusk",
        "guildMaster": "Darkness Wielder",
        "guildEmblemUrl": "https://example.com/images/guilds/dusk-brotherhood-emblem.jpg",
        "foundedYear": 1578,
        "motto": "In Shadows, Truth"
      }
    ]
    artists.json
    [
      {
        "id": "ART-001",
        "name": "Elena Ray",
        "description": "Elena Ray is a visionary pop artist known for her electrifying performances and innovative soundscapes that blend electronic music with traditional pop.",
        "age": 28,
        "isActive": true,
        "birthDate": "1995-07-22",
        "imageUrl": "https://example.com/images/artists/elena-ray.jpg",
        "genre": "Pop/Electronic",
        "instruments": ["Vocals", "Keyboard", "Synthesizer"],
        "recordLabel": {
          "id": "LABEL-101",
          "name": "Neon Groove Records",
          "labelLogoUrl": "https://example.com/images/labels/neon-groove-logo.jpg",
          "foundedYear": 2010,
          "founder": "Maxwell Turner",
          "headquarters": "Los Angeles, California"
        }
      },
      {
        "id": "ART-002",
        "name": "The Midnight Howlers",
        "description": "An indie rock band hailing from Austin, Texas, known for their gritty guitar riffs and raw, emotional lyrics.",
        "age": 5, // This could represent the number of years the band has been together
        "isActive": true,
        "birthDate": "2019-05-16",
        "imageUrl": "https://example.com/images/artists/midnight-howlers.jpg",
        "genre": "Indie Rock",
        "instruments": ["Guitar", "Drums", "Bass"],
        "recordLabel": {
          "id": "LABEL-202",
          "name": "Lone Star Records",
          "labelLogoUrl": "https://example.com/images/labels/lone-star-logo.jpg",
          "foundedYear": 2005,
          "founder": "Elijah Reed",
          "headquarters": "Austin, Texas"
        }
      }
    ]
    recordLabel.json
    [
      {
        "id": "LABEL-101",
        "name": "Neon Groove Records",
        "labelLogoUrl": "https://example.com/images/labels/neon-groove-logo.jpg",
        "foundedYear": 2010,
        "founder": "Maxwell Turner",
        "headquarters": "Los Angeles, California"
      },
      {
        "id": "LABEL-202",
        "name": "Lone Star Records",
        "labelLogoUrl": "https://example.com/images/labels/lone-star-logo.jpg",
        "foundedYear": 2005,
        "founder": "Elijah Reed",
        "headquarters": "Austin, Texas"
      }
    ]

    Milestone 2 - Express

    hashtag
    Opdracht Specificaties

    hashtag

    circle-exclamation

    Vanaf nu is het verplicht om de data via een fetch in te lezen van je publiekelijk beschikbare json file!

    hashtag
    Overzichtspagina met Objecten in een Tabel

    Creëer een overzichtspagina waar alle objecten worden weergegeven in een tabelvorm. Je mag zelf kiezen welke vijf velden van de objecten niet getoond worden in de tabel. Dit betekent dat sommige informatie van de objecten bewust wordt weggelaten voor een overzichtelijker weergave.

    hashtag
    Functionaliteiten:

    • Doorklikken naar Detailpagina: Voor elk object in de tabel, moet er een optie zijn om door te klikken naar een gedetailleerde pagina waar alle informatie van het object zichtbaar is, inclusief een afbeelding van het object.

    • Filterfunctie op Naam: Op de overzichtspagina moet een filterfunctie aanwezig zijn waarmee gebruikers kunnen filteren op de naam van de objecten. Dit filter checkt of de ingevoerde tekst aanwezig is in de namen van de objecten.

    • Sorteermogelijkheden: Gebruikers moeten in staat zijn om de objecten in de tabel te sorteren op basis van elk veld, zowel in oplopende (asc) als in aflopende (desc) volgorde.

    hashtag
    Opmerkingen:

    • Styling: Je bent vrij om zelf CSS te schrijven voor de styling van de pagina's. Daarnaast is het toegestaan om frameworks zoals Tailwind of Bootstrap te gebruiken voor het design. Zorg ervoor dat de interface gebruiksvriendelijk en overzichtelijk blijft.

    • Responsief Ontwerp: Het wordt sterk aangemoedigd om een responsief ontwerp te hanteren voor de applicatie.

    • Herbruikbaarheid: Implementeer de navigatiebalk met behulp van include files om hergebruik van code te bevorderen. Dit zorgt voor een consistent uiterlijk over alle pagina's heen, zonder dat er sprake is van code duplicatie, wat bijdraagt aan een meer gestructureerde en onderhoudbare codebase.

    Deze specificaties zijn bedoeld om een interactieve en gebruiksvriendelijke interface te bieden waarmee gebruikers gemakkelijk door de objecten en hun details kunnen navigeren, filteren en sorteren voor betere toegankelijkheid en overzicht.

    hashtag
    Voorbeeldproject: Trading Cards

    Als onderdeel van deze opdracht is er een voorbeeldproject gemaakt dat de functionaliteiten illustreert met gebruik van trading cards. Dit voorbeeld dient als inspiratie en richtlijn voor het ontwikkelen van je eigen project.

    hashtag
    Screenshots

    Bij dit voorbeeldproject zijn screenshots inbegrepen om een visuele indruk te geven van hoe de functionaliteiten geïmplementeerd kunnen worden. Let op de volgende aspecten in de screenshots:

    • Tabelweergave: Hoe de objecten in tabelvorm worden gepresenteerd, met aandacht voor welke velden zijn weggelaten voor overzichtelijkheid.

    • Detailpagina: De vormgeving en inrichting van de detailpagina van een object, inclusief afbeelding.

    • Filter- en sorteeropties: Hoe de filter- en sorteermogelijkheden zijn geïntegreerd in de gebruikersinterface.

    Deze screenshots dienen als voorbeeld en zijn niet bedoeld om exact gekopieerd te worden. Gebruik ze als inspiratiebron en pas de ideeën toe binnen de context van je eigen project.

    Doorklikken naar Gerelateerde Objecten: Als een object verwijst naar een ander object, moet er een mogelijkheid zijn om vanuit de detailpagina van het eerste object door te klikken naar de detailpagina van het gerelateerde object.

  • Weergave van Subobjecten: Op de detailpagina van een object moet er een lijst zijn van alle subobjecten die bij dit object horen. Deze lijst moet basisinformatie van de subobjecten bevatten en een optie om door te klikken naar de detailpagina's van deze subobjecten.

  • Navigatiebalk: Introduceer een navigatiebalk die gebruikers in staat stelt gemakkelijk tussen de verschillende delen van de applicatie te navigeren, zoals de overzichtspagina's. De positie van de navigatiebalk is flexibel en kan worden aangepast aan de layout en het design van de applicatie.

  • Server-side: Alle filtering en sortering gebeurt server-side.

  • Navigatiebalk
    Overzichtspagina met navigatiebalk
    Overzichtpagina van de trading cards
    Sortering van velden
    Search functionaliteit
    Overzicht van de guilds (De gerelateerde objecten)
    Detail pagina van de trading cards (hoofdobjecten)
    Detail pagina van de gerelateerde guilds (geralateerde objecten)