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 0000000000000000000000000000000000000000..d96b015bd82f708126437472f0a4cc2c69eedd26 --- /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 665645168d675284d4d66894a3d610243ae644b3..e38fadcc3e6af9a28d3e29e56f5a8ca48060cc39 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 11d0e3a52049e9691c895d6bde03de731c54f967..b1c17fd3db0ee2bd0f2c96029cc4adf88b5c8d2f 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 99f4681c570903c200e2a751ec518209868b2ed7..722bfeb6dddacdac0afa299e2fda825d37eb13b6 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 f2cf26e015a1212903b954ac57e479224db34ad5..40ad60534b1386691d68b6fb343ea0a16724cbef 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 388d94e57dc1440659c8320eca2485f5bd78fee9..0e4095b0c1550bc181b766d24659f4053339cce0 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"), ]