Skip to content
Snippets Groups Projects
Commit fedca85f authored by borzechof99's avatar borzechof99 :whale2:
Browse files

implemented redesign of Greeting and End

parent 4800a157
No related branches found
No related tags found
No related merge requests found
......@@ -368,63 +368,50 @@ class QuestionOrderEntry(models.Model):
return f"Entry {self.order_id}: {self.type_of_slot}"
class GreetingTextManager(models.Manager):
"""
Manager for getting or creating Greeting Texts for the User Frontend
"""
class SingletonModel(models.Model):
class Meta:
abstract = True
def get_or_create(self):
"""
If not Object exists, make one before returning it
"""
def save(self, *args, **kwargs):
self.pk = 1
super(SingletonModel, self).save(*args, **kwargs)
if self.count() == 0:
new_greeting = GreetingText()
new_greeting.save()
def delete(self, *args, **kwargs):
pass
return self.first()
@classmethod
def load(cls):
obj, _created = cls.objects.get_or_create(pk=1)
return obj
class GreetingText(models.Model):
class GreetingText(SingletonModel):
"""
Database with only one row (if everything is done right)
Includes start text as column
"""
objects = GreetingTextManager()
text = models.TextField(default="Willkommen zum Uni-Sport-O-Mat!")
def delete(self, *args, **kwargs):
self.text_de = self._meta.get_field("text").get_default()
self.text_en = self._meta.get_field("text").get_default()
def __str__(self):
return f"{self.text}"
class EndTextManager(models.Manager):
"""
Manager for getting or creating End Texts for the User Frontend
"""
def get_or_create(self):
"""
If not Object exists, make one before returning it
"""
if self.count() == 0:
new_greeting = EndText()
new_greeting.save()
return self.first()
class EndText(models.Model):
class EndText(SingletonModel):
"""
Database with only one row (if everything is done right)
Includes end text as column
"""
objects = EndTextManager()
text = models.TextField(default="Wähle deinen Sport!")
def delete(self, *args, **kwargs):
self.text_de = self._meta.get_field("text").get_default()
self.text_en = self._meta.get_field("text").get_default()
def __str__(self):
return f"{self.text}"
......@@ -851,128 +851,112 @@ class ScraperView(APIView):
return Response(status=200)
class GreetingEndView(APIView):
class GreetingEndView(viewsets.ViewSet):
"""
View for handling the beginning sentence
Method POST isn't allowed, since at all times, a single model for each text exists.
Method DELETE resets the values to their set default.
"""
given_object = None
def post(self, request):
def list(self, request):
"""
api/greeting POST
Creates a new object if none exist, otherwise forwards to PUT
Gives a List with two rows: Greeting in slot 1, End in slot 2.
Still needs to be paginated thanks to the Admin Frontend Design
"""
paginator = PageNumberWithPageSizePagination()
greeting = GreetingText.load()
end = EndText.load()
if self.given_object.objects.count() > 0:
return self.put(request)
sentence = self.given_object() # pylint: disable=not-callable
if "text_de" in request.data.keys():
sentence.text_de = request.data["text_de"]
if "text_en" in request.data.keys():
sentence.text_en = request.data["text_en"]
# Needs to be called once so paginator can get meta info
paginator.paginate_queryset([greeting, end], request)
sentence.save()
data = [
GreetingEndSerializer(greeting).data,
GreetingEndSerializer(end).data,
]
return Response(GreetingEndSerializer(sentence).data)
return paginator.get_paginated_response(data=data)
def get(self, request):
def retrieve(self, request, pk=None):
"""
api/greeting GET
Sends out the greeting
Retrieves the Greeting Text if pk==1, else End Text
"""
sentence = self.given_object.objects.all()
if sentence.count() == 0:
sentence = self.given_object() # pylint: disable=not-callable
if pk == "1":
obj = GreetingText.load()
else:
sentence = sentence.first()
obj = EndText.load()
data = GreetingEndSerializer(obj).data
return Response(GreetingEndSerializer(sentence).data)
return Response(data=data)
def put(self, request):
def update(self, request, pk=None):
"""
api/greeting PUT
Overwrites German and English beginning
Updates Greeting or End depending on pk
"""
sentence = self.given_object.objects.all()
data = request.data
if "text_de" not in data.keys() or "text_en" not in data.keys():
return Response(
status=400,
data={
"message": "Es müssen sowohl text_de als auch text_en geliefert werden!"
},
)
if sentence.count() == 0:
return Response(status=404)
if pk == "1":
obj = GreetingText.load()
else:
obj = EndText.load()
sentence = sentence.first()
obj.text_de = data["text_de"]
obj.text_en = data["text_en"]
sentence.text_de = request.data["text_de"]
sentence.text_en = request.data["text_en"]
obj.save()
sentence.save()
data = GreetingEndSerializer(obj).data
return Response(GreetingEndSerializer(sentence).data)
return Response(data)
def patch(self, request):
def partial_update(self, request, pk=None):
"""
api/greeting PATCH
Overwrites German and/or English beginning, if they exist
Updates Greeting or End depending on pk
"""
sentence = self.given_object.objects.all()
data = request.data
if sentence.count() == 0:
return Response(status=404)
if pk == "1":
obj = GreetingText.load()
else:
obj = EndText.load()
sentence = sentence.first()
if "text_de" in data.keys():
obj.text_de = data["text_de"]
if "text_en" in data.keys():
obj.text_en = data["text_en"]
if "text_de" in request.data.keys():
sentence.text_de = request.data["text_de"]
if "text_en" in request.data.keys():
sentence.text_en = request.data["text_en"]
obj.save()
sentence.save()
data = GreetingEndSerializer(obj).data
return Response(GreetingEndSerializer(sentence).data)
return Response(data)
def delete(self, request):
def destroy(self, request, pk=None):
"""
api/greeting DELETE
Deletes the object so default values are reinstated
Resets Object to their Default Texts
"""
sentence = self.given_object.objects.all()
if sentence.count() == 0:
return Response(status=404)
sentence = sentence.first()
sentence.text_de = self.given_object._meta.get_field("text").get_default()
sentence.text_en = self.given_object._meta.get_field("text").get_default()
sentence.save()
return Response(GreetingEndSerializer(sentence).data)
class GreetingView(GreetingEndView):
"""
View for the greeting strings
Inherited CRUD from GreetingEndView
"""
given_object = GreetingText
if pk == "1":
obj = GreetingText.load()
else:
obj = EndText.load()
class EndView(GreetingEndView):
"""
View for the end strings
Inherited CRUD from GreetingEndView
"""
obj.delete()
obj.save()
given_object = EndText
return Response(status=200, data={"message": "Daten zurückgesetzt!"})
class QuizView(APIView):
......@@ -988,10 +972,10 @@ class QuizView(APIView):
queryset = QuestionOrderEntry.objects.all().order_by("order_id")
data_dict = {
"start_de": GreetingText.objects.get_or_create().text_de,
"end_de": EndText.objects.get_or_create().text_de,
"start_en": GreetingText.objects.get_or_create().text_en,
"end_en": EndText.objects.get_or_create().text_en,
"start_de": GreetingText.load().text_de,
"end_de": EndText.load().text_de,
"start_en": GreetingText.load().text_en,
"end_en": EndText.load().text_en,
}
order_list = []
......
......@@ -25,6 +25,7 @@ router.register(r"sport", views.SmallSportListView, "small-sport-list")
router.register(r"question", views.SmallQuestionListView, "small-question-list")
router.register(r"snack", views.SnackListView, "snack")
router.register(r"activity", views.ActivityView, "activity")
router.register(r"greeting-end", views.GreetingEndView, "greeting-end")
urlpatterns = [
path("admin/", admin.site.urls),
......@@ -37,8 +38,6 @@ urlpatterns = [
path("api/admin/sport-scraper/", views.ScraperView.as_view(), name="scraper"),
path("api/admin/criteria/", views.CriteriaView.as_view(), name="criteria"),
path("api/admin/question-order/", views.QuestionOrderView.as_view(), name="order"),
path("api/admin/greeting/", views.GreetingView.as_view(), name="greeting"),
path("api/admin/end/", views.EndView.as_view(), name="end"),
path("api/admin/", include(router.urls)),
path("api/user/quiz/", views.QuizView.as_view(), name="quiz"),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment