From 7120dcd31705c29d96343c837587b72bbdac2f37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juhn-Vitus=20Sa=C3=9F?= Date: Sat, 15 Mar 2025 14:50:57 +0100 Subject: [PATCH] =?UTF-8?q?DB=20Model=20f=C3=BCr=20Quiz=20Spiele?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/play/admin.py | 3 +++ core/play/migrations/0001_initial.py | 37 ++++++++++++++++++++++++++++ core/play/models.py | 24 ++++++++++++++++++ 3 files changed, 64 insertions(+) create mode 100644 core/play/migrations/0001_initial.py diff --git a/core/play/admin.py b/core/play/admin.py index 8c38f3f..bdfc9d0 100644 --- a/core/play/admin.py +++ b/core/play/admin.py @@ -1,3 +1,6 @@ from django.contrib import admin +from . import models # Register your models here. +admin.site.register(QuizGame) +admin.site.register(QuizGameParticipant) \ No newline at end of file diff --git a/core/play/migrations/0001_initial.py b/core/play/migrations/0001_initial.py new file mode 100644 index 0000000..169302f --- /dev/null +++ b/core/play/migrations/0001_initial.py @@ -0,0 +1,37 @@ +# Generated by Django 5.1.7 on 2025-03-15 13:48 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('library', '0015_alter_qivipquiz_difficulty'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='QuizGame', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('join_code', models.CharField(max_length=6, unique=True)), + ('host_user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='host_user', to=settings.AUTH_USER_MODEL)), + ('quiz_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='library.qivipquiz')), + ], + ), + migrations.CreateModel( + name='QuizGameParticipant', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('display_name', models.CharField(max_length=15, verbose_name='Anzeigename')), + ('score', models.IntegerField(max_length=10, verbose_name='Punkte')), + ('avatar', models.CharField(max_length=200)), + ('quiz_game', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='participant', to='play.quizgame')), + ], + ), + ] diff --git a/core/play/models.py b/core/play/models.py index 71a8362..ce16a5d 100644 --- a/core/play/models.py +++ b/core/play/models.py @@ -1,3 +1,27 @@ from django.db import models +from django.contrib.auth.models import User +from library.models import QivipQuiz +import random, string # Create your models here. +class QuizGame(models.Model): + host_user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='host_user') + join_code = models.CharField(max_length=6, unique=True) + quiz_id = models.ForeignKey(QivipQuiz, on_delete=models.CASCADE) + + def save(self, *args, **kwargs): + if not self.join_code: + self.join_code = self.generate_unique_code() + super().save(*args, **kwargs) + + def generate_unique_code(self): + for i in range(10): + new_code = ''.join(random.choices(string.ascii_letters + string.digits, k=6)) + if not QuizGame.objects.filter(join_code=new_code).exists(): + return new_code + +class QuizGameParticipant(models.Model): + display_name = models.CharField(verbose_name="Anzeigename", max_length=15) + quiz_game = models.ForeignKey(QuizGame, on_delete=models.CASCADE, related_name="participant") + score = models.IntegerField(verbose_name="Punkte", max_length=10) + avatar = models.CharField(max_length=200) \ No newline at end of file