Skip to content

Commit

Permalink
Merge pull request #299 from SELab-2/backend_extras
Browse files Browse the repository at this point in the history
Backend extras
  • Loading branch information
LGDTimtou authored May 21, 2024
2 parents 56374be + 98e20de commit 3a71868
Show file tree
Hide file tree
Showing 15 changed files with 111 additions and 36 deletions.
12 changes: 12 additions & 0 deletions api/base_templates/file_name.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#!/bin/bash

#@param
# Vul hieronder de namen van de bestanden in die je in de gezipte folder wilt vinden.
file_name="verslag.pdf"


if [ -e "$file_name" ]; then
echo "$file_name present: OK"
else
echo "$file_name not present: FAIL"
fi
20 changes: 20 additions & 0 deletions api/base_templates/zip_contains_files.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#!/bin/bash

#@param
# Vul hieronder de namen van de bestanden in die je in de gezipte folder wilt vinden.
file_names=( "testfile1.txt" "testfile2.txt" )

#@param
# Vul hieronder de naam van het zip bestand waarin je de files wil vinden
zip_file_name="file.zip"


for file_name in "${file_names[@]}"; do
unzip -l $zip_file_name | grep -q $file_name;
if [ "$?" == "0" ]
then
echo "$file_name present: OK"
else
echo "$file_name not present: FAIL"
fi;
done
13 changes: 13 additions & 0 deletions api/middleware.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@
from django.contrib.auth.models import User
from api.models.gebruiker import Gebruiker
from api.serializers.gebruiker import GebruikerSerializer
from api.serializers.template import TemplateSerializer
from django.core.files import File
import requests
import os

URL = "https://graph.microsoft.com/v1.0/me"

Expand Down Expand Up @@ -59,6 +62,16 @@ def __call__(self, request):
try:
Gebruiker.objects.get(pk=request.user.id)
except Gebruiker.DoesNotExist:
directory_path = "api/base_templates"
for filename in os.listdir(directory_path):
file_path = os.path.join(directory_path, filename)
with open(file_path, "rb") as f:
django_file = File(f)
template_data = {"user": request.user.id, "bestand": django_file}
serializer = TemplateSerializer(data=template_data)
if serializer.is_valid():
serializer.save()

gebruiker_post_data = {
"user": request.user.id,
"subjects": [],
Expand Down
3 changes: 3 additions & 0 deletions api/models/gebruiker.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ class Gebruiker(models.Model):
met een één-op-één-relatie. Dit veld fungeert als het primaire sleutelveld.
is_lesgever (BooleanField): Een boolean veld dat aangeeft of de gebruiker een lesgever is of niet.
Standaard ingesteld op False.
gepinde_vakken (ManyToManyField): Een veld dat verwijst naar het Vak model met een
veel-op-veel-relatie, om de vakken die de gebruiker heeft gepind op te slaan.
Dit veld is optioneel (mag leeg zijn).
Methods:
__str__(): Geeft een representatie van het model als een string terug,
Expand Down
1 change: 1 addition & 0 deletions api/models/groep.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ class Groep(models.Model):
de primaire sleutel voor de groep.
studenten (ManyToManyField): Een Many-to-Many relatie met het 'Gebruiker' model,
waarmee meerdere gebruikers aan een groep kunnen worden gekoppeld.
Dit veld is optioneel (mag leeg zijn).
project (ForeignKey): Een ForeignKey relatie met het 'Project' model,
waarmee wordt aangegeven tot welk project deze groep behoort.
Als het bijbehorende project wordt verwijderd,
Expand Down
13 changes: 9 additions & 4 deletions api/models/indiening.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@

def upload_to(instance, filename):
"""
Functie om het pad te genereren waar het bestand wordt opgeslagen.
Genereert het pad waar het bestand wordt opgeslagen.
Args:
instance: De huidige instantie van het model.
Expand Down Expand Up @@ -48,11 +48,16 @@ class Indiening(models.Model):
indieningen verwijderd.
tijdstip (DateTimeField): Een veld dat automatisch het tijdstip
registreert waarop de indiening is aangemaakt.
bestand (FileField): Een veld voor het uploaden van het bestand,
met een dynamisch gegenereerd pad.
status (IntegerField): Een veld dat de status van de testen zal bijhouden.
result (TextField): Een veld dat het resultaat van de uitgevoerde testen zal bijhouden.
artefacten (FileField): Een optioneel veld voor het uploaden van extra artefacten.
Methods:
__str__(): Geeft een representatie van het model als een string terug, die de ID van de indiening bevat.
__str__(): Geeft een representatie van het model als een string terug,
die de ID van de indiening bevat.
save(*args, **kwargs): Overschrijft de standaard opslaanmethode om het pad van het bestand bij te werken.
"""

indiening_id = models.AutoField(primary_key=True)
Expand Down Expand Up @@ -82,7 +87,7 @@ def save(self, *args, **kwargs):

def run_tests_async(instance):
"""
Voert tests uit op een asynchrone manier en werkt de status en resultaat van de indiening bij.
Voert tests uit op een asynchrone manier en werkt de status en het resultaat van de indiening bij.
Args:
instance: Het instantie-object van de indiening.
Expand All @@ -105,7 +110,7 @@ def run_tests_async(instance):
def indiening_post_init(sender, instance, created, **kwargs):
"""
Een signaalhandler die wordt geactiveerd na het maken van een nieuwe indiening.
Start een asynchrone thread om de tests uit te voeren.
Start een asynchrone thread om de tests uit te voeren of werkt de status bij indien er geen restricties zijn.
Args:
sender: De verzender van het signaal.
Expand Down
26 changes: 12 additions & 14 deletions api/models/project.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

def upload_to(instance, filename):
"""
Functie om het pad te genereren waar het opgavebestand wordt opgeslagen.
Genereert het pad waar het opgavebestand wordt opgeslagen.
Args:
instance: De huidige instantie van het model.
Expand All @@ -26,28 +26,26 @@ class Project(models.Model):
titel (CharField): Titel van het project.
beschrijving (TextField): Beschrijving van het project.
opgave_bestand (FileField): Een veld voor het uploaden van het opgavebestand voor het project.
(eventueel uit te breiden tot meerdere bestanden mogelijk)
vak (ForeignKey): Een ForeignKey relatie met het 'Vak' model,
waarmee wordt aangegeven tot welk vak dit project behoort.
waarmee wordt aangegeven tot welk vak dit project behoort.
Als het bijbehorende vak wordt verwijderd, worden ook de bijbehorende projecten verwijderd.
deadline (DateTimeField): Een veld voor het instellen van de deadline voor het project.
Kan optioneel zijn (null=True).
Kan optioneel zijn (null=True, blank=True).
extra_deadline (DateTimeField): Een extra veld voor het instellen van een extra deadline voor het project.
Kan optioneel zijn (null=True).
Kan optioneel zijn (null=True, blank=True).
max_score (IntegerField): Een veld voor het instellen van de maximale score voor het project.
Standaard ingesteld op 20.
max_groep_grootte (IntegerField): Een veld voor het instellen van de max grootte van de groep voor het project.
Standaard ingesteld op 1.
student_groep (BooleanField): Een veld om aan te geven of de studenten hun eigen groep mogen kiezen.
Standaard ingesteld of False.
Standaard ingesteld op 20.
max_groep_grootte (IntegerField): Een veld voor het instellen van de maximale grootte van de groep
voor het project. Standaard ingesteld op 1.
student_groep (BooleanField): Een veld om aan te geven of het een individueel project is of niet.
Standaard ingesteld op False.
zichtbaar (BooleanField): Een veld om aan te geven of het project zichtbaar is of niet.
Standaard ingesteld op True.
Standaard ingesteld op True.
gearchiveerd (BooleanField): Een veld om aan te geven of het project gearchiveerd is of niet.
Standaard ingesteld op False.
Standaard ingesteld op False.
Methoden:
__str__(): Geeft een representatie van het model als een string terug,
die de titel van het project bevat.
__str__(): Geeft een representatie van het model als een string terug, die de titel van het project bevat.
"""

project_id = models.AutoField(primary_key=True)
Expand Down
8 changes: 4 additions & 4 deletions api/models/restrictie.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

def upload_to(instance, filename):
"""
Functie om het pad te genereren waar het opgavebestand wordt opgeslagen.
Genereert het pad waar het opgavebestand wordt opgeslagen.
Args:
instance: De huidige instantie van het model.
Expand All @@ -24,15 +24,15 @@ class Restrictie(models.Model):
Velden:
restrictie_id (AutoField): Automatisch gegenereerd veld dat fungeert als primaire sleutel voor de restrictie.
project (ForeignKey): Een ForeignKey relatie met het 'Project' model,
waarmee wordt aangegeven welk project deze restrictie betreft.
waarmee wordt aangegeven welk project deze restrictie betreft.
Als het bijbehorende project wordt verwijderd, worden ook de bijbehorende restricties verwijderd.
script (FileField): Een veld voor het uploaden van het script van de restrictie/test.
moet_slagen (BooleanField): Een veld om aan te geven of de inzending aan de restrictie/test moet voldoen.
Standaard ingesteld op False.
Standaard ingesteld op False.
Methoden:
__str__(): Geeft een representatie van het model als een string terug,
die het titel van het bijbehorende project en de beschrijving van de restrictie bevat.
die de titel van het bijbehorende project en de beschrijving van de restrictie bevat.
"""

restrictie_id = models.AutoField(primary_key=True)
Expand Down
3 changes: 2 additions & 1 deletion api/models/score.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ class Score(models.Model):
wordt ook de bijbehorende score verwijderd.
Methods:
__str__(): Geeft een representatie van het model als een string terug, die de score-ID bevat.
__str__(): Geeft een representatie van het model als een string terug,
die de score-ID bevat.
"""

score_id = models.AutoField(primary_key=True)
Expand Down
17 changes: 16 additions & 1 deletion api/models/template.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

def upload_to(instance, filename):
"""
Functie om het pad te genereren waar het bestand wordt opgeslagen.
Genereert het pad waar het bestand wordt opgeslagen.
Args:
instance: De huidige instantie van het model.
Expand All @@ -17,6 +17,21 @@ def upload_to(instance, filename):


class Template(models.Model):
"""
Model voor het bijhouden van templates geüpload door gebruikers.
Velden:
template_id (AutoField): Een automatisch gegenereerd veld dat fungeert als de primaire sleutel
voor de template.
user (ForeignKey): Een ForeignKey relatie met het 'User' model,
waarmee wordt aangegeven welke gebruiker de template heeft geüpload.
bestand (FileField): Een veld voor het uploaden van de template,
met een dynamisch gegenereerd pad.
Methoden:
__str__(): Geeft een representatie van het model als een string terug,
die de bestandsnaam van de template bevat.
"""

template_id = models.AutoField(primary_key=True)
user = models.ForeignKey(
Expand Down
8 changes: 3 additions & 5 deletions api/models/vak.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,11 @@ class Vak(models.Model):
vak_id (AutoField): Een automatisch gegenereerd veld dat fungeert als de primaire sleutel voor het vak.
naam (CharField): Een veld om de naam van het vak op te slaan.
jaartal (IntegerField): Een veld om het jaartal van het vak op te slaan. (voor 2024-2025 zou je 2025 opslaan)
gearchiveerd (BooleanField): Een veld om aan te geven als het vak gearchiveerd is.
gearchiveerd (BooleanField): Een veld om aan te geven of het vak gearchiveerd is. Standaard ingesteld op False.
studenten (ManyToManyField): Een Many-to-Many relatie met het 'Gebruiker' model,
waarmee meerdere gebruikers aan het vak kunnen worden gekoppeld als studenten.
waarmee meerdere gebruikers aan het vak kunnen worden gekoppeld als studenten.
lesgevers (ManyToManyField): Een Many-to-Many relatie met het 'Gebruiker' model,
waarmee meerdere gebruikers aan het vak kunnen worden gekoppeld als lesgevers.
invited (ManyToManyField): Een Many-To-Many relatie met het 'Gebruiker' model,
waarmee meerdere gebruikers aan het vak kunenn worden gekoppeld als geinviteerde.
waarmee meerdere gebruikers aan het vak kunnen worden gekoppeld als lesgevers.
Methods:
__str__(): Geeft een representatie van het model als een string terug, die de naam van het vak bevat.
Expand Down
10 changes: 7 additions & 3 deletions api/serializers/gebruiker.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ class GebruikerSerializer(serializers.ModelSerializer):
"""
Serializer voor het serialiseren en deserialiseren van Gebruiker objecten.
Fields:
Velden:
Meta.model (Gebruiker): Het model waarop de serializer is gebaseerd.
Meta.fields (tuple): De velden die moeten worden opgenomen in de serializer.
Meta.fields (list): De velden die moeten worden opgenomen in de serializer.
Hier wordt '__all__' gebruikt om alle velden op te nemen.
Methods:
Methoden:
create(self, validated_data): Maakt een nieuwe gebruiker aan en voegt deze toe aan de database.
update(self, instance, validated_data): Werkt een bestaande gebruiker bij in de database.
"""
Expand All @@ -34,6 +34,8 @@ class Meta:

def create(self, validated_data):
"""
Maakt een nieuwe gebruiker aan.
Args:
validated_data (dict): Gevalideerde gegevens over de gebruiker.
Expand All @@ -50,6 +52,8 @@ def create(self, validated_data):

def update(self, instance, validated_data):
"""
Werkt een bestaande gebruiker bij.
Args:
instance (Gebruiker): De gebruiker die moet worden bijgewerkt.
validated_data (dict): Gevalideerde gegevens over de gebruiker.
Expand Down
5 changes: 2 additions & 3 deletions api/serializers/template.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,11 @@

class TemplateSerializer(serializers.ModelSerializer):
"""
Serializer voor het serialiseren en deserialiseren van IndieningBestand objecten.
Serializer voor het serialiseren en deserialiseren van Template objecten.
Fields:
Meta.model (IndieningBestand): Het model waarop de serializer is gebaseerd.
Meta.model (Template): Het model waarop de serializer is gebaseerd.
Meta.fields (tuple): De velden die moeten worden opgenomen in de serializer. Hier worden alle velden opgenomen.
"""

class Meta:
Expand Down
6 changes: 6 additions & 0 deletions api/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,12 @@ def get_gebruiker(user):


def send_indiening_confirmation_mail(indiening):
"""
Verstuurt een bevestigingsmail naar alle studenten in de groep voor een specifieke indiening.
Args:
indiening (Indiening): De indiening waarvoor de bevestigingsmail verstuurd moet worden.
"""
project = indiening.groep.project

project_url = f"https://sel2-4.ugent.be/course/{project.vak.vak_id}/assignment/{project.project_id}"
Expand Down
2 changes: 1 addition & 1 deletion api/views/template.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ def template_detail(request, id, format=None):
@api_view(["GET"])
def template_detail_bestand(request, id, format=None):
"""
Een view om het bestand van een specifieke tempalte te downloaden of de content in JSON-formaat te krijgen.
Een view om het bestand van een specifieke template te downloaden of de content in JSON-formaat te krijgen.
Args:
id (int): De primaire sleutel van de template.
Expand Down

0 comments on commit 3a71868

Please sign in to comment.