Skip to content

API Documentatie

Timon Coucke edited this page May 21, 2024 · 46 revisions

Gebruikers

HTTP Requests

1. /api/gebruikers/

  • GET: Krijg een lijst van alle gebruikers in JSON-formaat.
    • Parameters:
      • is_lesgever=<bool>: Filtert gebruikers op lesgevers of studenten
      • email=<string>: Filtert gebruikers op email

2. /api/gebruikers/<int:id>/

  • GET: Krijg de gebruiker met gegeven user_id in JSON-formaat.
  • PUT, PATCH: Pas de gebruiker met gegeven user_id aan. Zie JSON-voorstelling voor body vereisten.

3. /api/gebruikers/me/

  • GET: Krijg je eigen gebruiker in JSON-formaat.

JSON-voorstelling:

{
    ("user": <int>),
    "is_lesgever": <bool>,
    ("first_name": <string>),
    ("last_name": <string>),
    ("email": <email>),
    "gepinde_vakken": <list[int]>
}

Validatie Testen

  • Bij het veranderen van het is_lesgever veld, moet de gebruiker eerst uit zijn huidige vakken verwijderd zijn.
  • De gebruiker moet deel uitmaken van alle gepinde vakken

Vakken

HTTP Requests

1. /api/vakken/

  • GET: Krijg een lijst van alle vakken in JSON-formaat.
    • Parameters:
      • in=<bool>: Filtert op vakken waarvan de gebruiker deel uitmaakt.
      • gearchiveerd=<bool>: Filtert op gearchiveerde vakken.
  • POST: Maak een nieuw vak aan. Zie JSON-voorstelling voor body vereisten.

2. api/vakken/<int:id>/

  • GET: Krijg het vak met gegeven vak_id in JSON-formaat.
  • PUT, PATCH: Pas het vak met gegeven vak_id aan. Zie JSON-voorstelling voor body vereisten.
  • DELETE: Verwijder het vak met gegeven vak_id

3. api/vakken/<int:id>/accept_invite/

  • GET: Accepteer de invite van een gegeven vak met vak_id

JSON-voorstelling:

{
    ("vak_id": <int>),
    "naam": <string>,
    "jaartal": <int> (VB: voor 2024-2025 zou 2025 worden opgeslaan),
    ["gearchiveerd": <bool>, default=false],
    "studenten": <list[int]>,
    "lesgevers": <list[int]>,
    "invited": <list[int]>
}

Validatie Testen

  • Een gebruiker in studenten moet voldoen aan is_lesgever=false.
  • Een gebruiker in lesgevers moet voldoen aan is_lesgever=true.

Projecten

HTTP Requests

1. /api/projecten/

  • GET: Krijg een lijst van alle projecten in JSON-formaat.
    • Parameters:
      • vak=<int>: Filtert projecten op hun corresponderend vak.
  • POST: Maak een nieuw project aan. Zie JSON-voorstelling voor body vereisten.

2. api/projecten/<int:id>/

  • GET: Krijg het project met gegeven project_id in JSON-formaat.
  • PUT, PATCH: Pas het project met gegeven project_id aan. Zie JSON-voorstelling voor body vereisten.
  • DELETE: Verwijder het project met gegeven project_id

3. api/projecten/<int:id>/opgave_bestand/

  • GET: Download het opgave bestand van het project met gegeven project_id.

JSON-voorstelling:

{
    ("project_id": <int>),
    "titel": <string>,
    "beschrijving": <string>,
    ["opgave_bestand": <file>],
    "vak": <int>,
    ["max_score": <int>, default=20],
    ["aantal_groepen": <int>, default=10],
    ["max_groep_grootte": <int>, default=1],
    ["student_groep": <bool>, default=false],
    ["deadline": <YYYY-MM-DDTHH:MM>, default=null],
    ["extra_deadline": <YYYY-MM-DDTHH:MM>, default=null],
    ["zichtbaar": <bool>, default=true],
    ["gearchiveerd": <bool>, default=false]
}

Validatie Testen

  • deadline moet na de huidige datum liggen.
  • extra_deadline moet na de eerste deadline liggen.
  • vak mag niet aangepast worden bij een PUT request.

Restricties

HTTP Requests

1. /api/restricties/

  • GET: Krijg een lijst van alle restricties in JSON-formaat.
    • Parameters:
      • project=<int>: Filtert restricties op hun corresponderend project.
      • moet_slagen=<bool>: Filtert restricties op als ze al dan niet moeten slagen.
  • POST: Maak een nieuwe restrictie aan. Zie JSON-voorstelling voor body vereisten.

2. api/restricties/<int:id>/

  • GET: Krijg de restricite met gegeven restrictie_id in JSON-formaat.
  • PUT, PATCH: Pas de restrictie met gegeven restrictie_id aan. Zie JSON-voorstelling voor body vereisten.
  • DELETE: Verwijder de restrictie met gegeven restrictie_id

3. api/restricties/<int:id>/script/

  • GET: Download het script van de restrictie met gegeven restrictie_id.

JSON-voorstelling:

{
    ("restrictie_id": <int>),
    "project": <int>,
    "script": <file>,
    "moet_slagen": <bool>,
}

Validatie Testen

  • script moet een Python of Shell file zijn.
  • project mag niet aangepast worden bij een PUT request.

Groepen

HTTP Requests

1. /api/groepen/

  • GET: Krijg een lijst van alle groepen in JSON-formaat.
    • Parameters:
      • project=<int>: Filtert groepen op hun corresponderend project.
      • student=<int>: Filter groepen op hun bijhorende studenten.
  • POST: Maak een nieuwe groep aan. Zie JSON-voorstelling voor body vereisten.

2. api/groepen/<int:id>/

  • GET: Krijg de groep met gegeven groep_id in JSON-formaat.
  • PUT, PATCH: Pas de groep met gegeven groep_id aan. Zie JSON-voorstelling voor body vereisten.
  • DELETE: Verwijder de groep met gegeven groep_id

JSON-voorstelling:

{
    ("groep_id": <int>),
    "studenten": <list[int]>,
    "project": <int>
}

Validatie Testen

  • Alle gebruikers in de lijst studenten moeten voldoen aan is_lesgever=false
  • Voor een gegeven project mag een student in maximum één groep zitten.
  • De student moet het het vak volgen van het corresponderend project.
  • project mag niet aangepast worden bij een PUT request.
  • Het aantal studenten moet lager of gelijk zijn aan de max_groep_grootte van het project

Indieningen

HTTP Requests

1. /api/indieningen/

  • GET: Krijg een lijst van alle indieningen in JSON-formaat.
    • Parameters:
      • groep=<int>: Filtert indieningen op hun corresponderende groep.
      • project=<int>: Filtert indieningen op hun corresponderend project.
      • vak=<int>: Filtert indieningen op hun corresponderend vak.
  • POST: Maak een nieuwe indiening aan. Zie JSON-voorstelling voor body vereisten.

2. api/indieningen/<int:id>/

  • GET: Krijg de indiening met gegeven indiening_id in JSON-formaat.
  • DELETE: Verwijder de indiening met gegeven indiening_id

3. api/indieningen/<int:id>/indiening_bestand/

  • GET: Download het indiening_bestand van de indiening met gegeven indiening_id.

4. api/indieningen/<int:id>/artefacten/

  • GET: Download de gegenereerde artefacten van de docker environment in een zipfile artefacten.zip.

JSON-voorstelling:

{
   ("indiening_id": <int>),
   "groep": <int>,
   "bestand": <file>,
   ("tijdstip": <YYYY-MM-DDTHH:MM>),
   ("status": <int>, choices=[-1 (=FAIL), 0 (=PENDING), 1 (=PASSED)]),
   ("result": <string>),
   "indiening_bestanden": [
      {
         ("indiening_bestand_id": <int>),
         "indiening": <int>,
         "bestand": <file>
      },
      ...
   ]
}

Validatie Testen

  • groep mag niet aangepast worden bij een PUT request

Scores

HTTP Requests

1. /api/scores/

  • GET: Krijg een lijst van alle scores in JSON-formaat.
    • Parameters:
      • indiening=<int>: Filtert scores op hun corresponderende indiening.
  • POST: Maak een nieuwe score aan. Zie JSON-voorstelling voor body vereisten.

2. api/scores/<int:id>/

  • GET: Krijg de score met gegeven score_id in JSON-formaat.
  • PUT, PATCH: Pas de score met gegeven score_id aan. Zie JSON-voorstelling voor body vereisten.
  • DELETE: Verwijder de score met gegeven score_id

JSON-voorstelling:

{
    ("score_id": <int>),
    "score": <int>,
    "indiening": <int>
}

Validatie Testen

  • score moet onder de max_score van het project liggen.
  • Elke indiening kan maximum één score krijgen.
  • indiening mag niet aangepast worden bij een PUT request.

Templates

HTTP Requests

1. /api/templates/

  • GET: Krijg een lijst van alle templates in JSON-formaat.
    • Parameters:
      • lesgever_id=<int>: Filtert templates op hun corresponderende lesgever.
  • POST: Maak een nieuwe template aan. Zie JSON-voorstelling voor body vereisten.

2. api/templates/<int:id>/

  • GET: Krijg de template met gegeven template_id in JSON-formaat.
  • PUT, PATCH: Pas de template met gegeven template_id aan. Zie JSON-voorstelling voor body vereisten.
  • DELETE: Verwijder de template met gegeven template_id

3. api/templates/<int:id>/template/

  • GET: Krijg het template bestand terug
    • Parameters:
      • content=<bool>: Als deze parameter op true staat, zal alleen de inhoud van het bestand teruggegeven worden in JSON-formaat: {"content": <bestand_inhoud>}

JSON-voorstelling:

{
    ("template_id": <int>),
    "user": <int>,
    "bestand": <file>
}