From 2659f80d7b483128ea3878d68dfef7ba4901f28a Mon Sep 17 00:00:00 2001 From: borzechof99 <borzechof99@mi.fu-berlin.de> Date: Mon, 28 Jun 2021 20:21:03 +0200 Subject: [PATCH] Add GreetingEndModel and Views --- .../migrations/0013_auto_20210628_1751.py | 31 +++ unisportomat/quiz/models.py | 13 ++ unisportomat/quiz/serializers.py | 19 ++ unisportomat/quiz/translation.py | 11 +- unisportomat/quiz/views.py | 209 +++++++++++++++++- unisportomat/unisportomat/urls.py | 2 + 6 files changed, 283 insertions(+), 2 deletions(-) create mode 100644 unisportomat/quiz/migrations/0013_auto_20210628_1751.py diff --git a/unisportomat/quiz/migrations/0013_auto_20210628_1751.py b/unisportomat/quiz/migrations/0013_auto_20210628_1751.py new file mode 100644 index 0000000..d96b015 --- /dev/null +++ b/unisportomat/quiz/migrations/0013_auto_20210628_1751.py @@ -0,0 +1,31 @@ +# Generated by Django 3.2 on 2021-06-28 17:51 + +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('quiz', '0012_merge_20210627_2254'), + ] + + operations = [ + migrations.CreateModel( + name='GreetingEndTexts', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('greeting', models.TextField(default='Willkommen zum Uni-Sport-O-Mat!')), + ('greeting_de', models.TextField(default='Willkommen zum Uni-Sport-O-Mat!', null=True)), + ('greeting_en', models.TextField(default='Willkommen zum Uni-Sport-O-Mat!', null=True)), + ('end', models.TextField(default='Wähle deinen Sport!')), + ('end_de', models.TextField(default='Wähle deinen Sport!', null=True)), + ('end_en', models.TextField(default='Wähle deinen Sport!', null=True)), + ], + ), + migrations.AlterField( + model_name='sport', + name='last_used', + field=models.DateField(default=django.utils.timezone.localdate), + ), + ] diff --git a/unisportomat/quiz/models.py b/unisportomat/quiz/models.py index 6656451..e38fadc 100644 --- a/unisportomat/quiz/models.py +++ b/unisportomat/quiz/models.py @@ -301,3 +301,16 @@ class QuestionOrderEntry(models.Model): def __str__(self): return f"Entry {self.order_id}: {self.type_of_slot}" + + +class GreetingEndTexts(models.Model): + """ + Database With only one Row (if everything is done right) + Includes Start and End text as column + """ + + greeting = models.TextField(default="Willkommen zum Uni-Sport-O-Mat!") + end = models.TextField(default="Wähle deinen Sport!") + + def __str__(self): + return f"{self.greeting} | {self.end}" diff --git a/unisportomat/quiz/serializers.py b/unisportomat/quiz/serializers.py index 11d0e3a..b1c17fd 100644 --- a/unisportomat/quiz/serializers.py +++ b/unisportomat/quiz/serializers.py @@ -204,3 +204,22 @@ class CriteriaSerializer(serializers.BaseSerializer): criteria_list.append(criterion_dict) return criteria_list + + +class GreetingEndSerializer(serializers.BaseSerializer): + def to_representation(self, obj_tuple): + + obj, greeting_bool = obj_tuple + + if greeting_bool: + json_obj = { + "text_de": obj.greeting_de, + "text_en": obj.greeting_en, + } + else: + json_obj = { + "text_de": obj.end_de, + "text_en": obj.end_en, + } + + return json_obj diff --git a/unisportomat/quiz/translation.py b/unisportomat/quiz/translation.py index 99f4681..722bfeb 100644 --- a/unisportomat/quiz/translation.py +++ b/unisportomat/quiz/translation.py @@ -4,7 +4,7 @@ Here, every Model which needs translation fields is registered. from modeltranslation.translator import register, TranslationOptions -from .models import Question, CallToMove, KnowledgeSnack +from .models import Question, CallToMove, KnowledgeSnack, GreetingEndTexts @register(Question) @@ -41,3 +41,12 @@ class KnowledgeSnackTranslationOptions(TranslationOptions): fields = ("text",) required_languages = ("de",) fallback_values = ("No Translation for this Field",) + + +@register(GreetingEndTexts) +class GreetingEndTextsTranslationOptions(TranslationOptions): + """ + Translation Options for GreetingEndTexts. + """ + + fields = ("greeting", "end") diff --git a/unisportomat/quiz/views.py b/unisportomat/quiz/views.py index f2cf26e..40ad605 100644 --- a/unisportomat/quiz/views.py +++ b/unisportomat/quiz/views.py @@ -18,8 +18,9 @@ from .serializers import ( SingleSportSerializer, CriteriaSerializer, IncompleteSportSerializer, + GreetingEndSerializer, ) -from .models import Sport, Criterion, Question +from .models import Sport, Criterion, Question, GreetingEndTexts # Create your views here. @@ -281,3 +282,209 @@ class CriteriaView(APIView): response = CriteriaSerializer(data) return Response(response.data) + + +class BeginningView(APIView): + """ + View for handling the beginning sentence + """ + + def post(self, request): + """ + api/greeting POST + Creates a New Object if none exist, otherwise forwards to PUT + """ + + if GreetingEndTexts.objects.count() > 0: + return self.put(request) + + sentence = GreetingEndTexts() + + sentence.greeting_de = request.data["text_de"] + sentence.greeting_en = request.data["text_en"] + + sentence.save() + + return Response(GreetingEndSerializer((sentence, True)).data) + + def get(self, request): + """ + api/greeting GET + Sends out the Greeting + """ + + sentence = GreetingEndTexts.objects.all() + + if sentence.count() == 0: + return Response(status=404) + else: + sentence = sentence.first() + + return Response(GreetingEndSerializer((sentence, True)).data) + + def put(self, request): + """ + api/greeting PUT + Overwrites german and english Beginning + """ + + sentence = GreetingEndTexts.objects.all() + + if sentence.count() == 0: + return Response(status=404) + else: + sentence = sentence.first() + + sentence.greeting_de = request.data["text_de"] + sentence.greeting_en = request.data["text_en"] + + sentence.save() + + return Response(GreetingEndSerializer((sentence, True)).data) + + def patch(self, request): + """ + api/greeting PATCH + Overwrites german and/or english Beginning, if they exist + """ + + sentence = GreetingEndTexts.objects.all() + + if sentence.count() == 0: + return Response(status=404) + else: + sentence = sentence.first() + + if "text_de" in request.data.keys(): + sentence.greeting_de = request.data["text_de"] + if "text_en" in request.data.keys(): + sentence.greeting_en = request.data["text_en"] + + sentence.save() + + return Response(GreetingEndSerializer((sentence, True)).data) + + def delete(self, request): + """ + api/greeting DELETE + Deletes The Object so Default Values are reinstated + """ + + sentence = GreetingEndTexts.objects.all() + + if sentence.count() == 0: + return Response(status=404) + else: + sentence = sentence.first() + + sentence.greeting_de = GreetingEndTexts._meta.get_field( + "greeting" + ).get_default() + sentence.greeting_en = GreetingEndTexts._meta.get_field( + "greeting" + ).get_default() + + sentence.save() + + return Response(GreetingEndSerializer((sentence, True)).data) + + +class EndView(APIView): + """ + View for handling the ending sentence + """ + + def post(self, request): + """ + api/end POST + Creates a New Object if none exist, otherwise forwards to PUT + """ + + if GreetingEndTexts.objects.count() > 0: + return self.put(request) + + sentence = GreetingEndTexts() + + sentence.end_de = request.data["text_de"] + sentence.end_en = request.data["text_en"] + + sentence.save() + + return Response(GreetingEndSerializer((sentence, False)).data) + + def get(self, request): + """ + api/end GET + Sends out the Greeting + """ + + sentence = GreetingEndTexts.objects.all() + + if sentence.count() == 0: + return Response(status=404) + else: + sentence = sentence.first() + + return Response(GreetingEndSerializer((sentence, False)).data) + + def put(self, request): + """ + api/end PUT + Overwrites german and english Beginning + """ + + sentence = GreetingEndTexts.objects.all() + + if sentence.count() == 0: + return Response(status=404) + else: + sentence = sentence.first() + + sentence.end_de = request.data["text_de"] + sentence.end_en = request.data["text_en"] + + sentence.save() + + return Response(GreetingEndSerializer((sentence, False)).data) + + def patch(self, request): + """ + api/end PATCH + Overwrites german and/or english Beginning, if they exist + """ + + sentence = GreetingEndTexts.objects.all() + + if sentence.count() == 0: + return Response(status=404) + else: + sentence = sentence.first() + + if "text_de" in request.data.keys(): + sentence.end_de = request.data["text_de"] + if "text_en" in request.data.keys(): + sentence.end_en = request.data["text_en"] + + sentence.save() + + return Response(GreetingEndSerializer((sentence, False)).data) + + def delete(self, request): + """ + api/end DELETE + Deletes The Object so Default Values are reinstated + """ + + sentence = GreetingEndTexts.objects.all() + + if sentence.count() == 0: + return Response(status=404) + else: + sentence = sentence.first() + + sentence.end_de = GreetingEndTexts._meta.get_field("end").get_default() + sentence.end_en = GreetingEndTexts._meta.get_field("end").get_default() + + sentence.save() + + return Response(GreetingEndSerializer((sentence, False)).data) diff --git a/unisportomat/unisportomat/urls.py b/unisportomat/unisportomat/urls.py index 388d94e..0e4095b 100644 --- a/unisportomat/unisportomat/urls.py +++ b/unisportomat/unisportomat/urls.py @@ -33,4 +33,6 @@ urlpatterns = [ name="incomplete", ), path("api/admin/criteria/", views.CriteriaView.as_view(), name="criteria"), + path("api/admin/beginning/", views.BeginningView.as_view(), name="beginning"), + path("api/admin/end/", views.EndView.as_view(), name="end"), ] -- GitLab