diff --git a/docs/index.md b/docs/index.md index bfcb92e..88c7015 100644 --- a/docs/index.md +++ b/docs/index.md @@ -56,13 +56,12 @@ Ein Organisator ist Mitglied des Repair-Cafés der die Termine mit den Gästen o Ein Cafe ist ein Repair-Café Termin. Attribute: + - Datum: Datum der Veranstaltung - Ort: Beschreibung wo das Repair-Café stattfindet -Technische Attribute: -- Id: Aufsteigende Nummer des Repair-Café - Annahmen: + - Ein Repair-Café beginnt um 13:00 Uhr. - Ein Repair-Café hat drei aufeinanderfolgende Slots mit je einer Stunde @@ -71,13 +70,12 @@ Annahmen: Ein Reparateur ist ein Mitglied des Repair-Cafés das Gäste bei der Reparatur ihrer Geräte unterstützt. Attribute: + - Name: Name des Reparateurs - Mail: eMail-Adresse für Benachrichtigungen -Technische Attribute: -- Id: Aufsteigende Nummer des Reparateurs - Annahmen: + - Reparatuere sind immmer verfügbar, d.h. jeder Reparatuer wird zu einem neuen Repair-Café Termin automatisch hinzugefügt. - Reparatuere können alles reparieren. Greäte Kategorien, Skills, ... können später hinzugefügt werden. @@ -86,17 +84,16 @@ Annahmen: Ein Organisator ist ein Mitglied des Repair-Cafés das Reparaturtermine mit den Gästen vereinbart. Attribute: + - Name: Name des Organisators - Mail: eMail-Adresse für Benachrichtigungen -Technische Attribute: -- Id: Aufsteigende Nummer des Organisators - ### Gerät Ein Gerät ist ein defekter Gegenstand der im Rahmen eines Repair-Cafés repariert werden soll. Attribute: + - Besitzer: Name des Besitzers - Mail: eMail-Adresse des Besitzers für Benachrichtigungen - Gerät: Bezeichnung des Geräts @@ -104,9 +101,11 @@ Attribute: - Folgetermin: Boolesches Flag das anzeigt ob es sich um einen Folgetermin handelt. Technische Attribute: -- Id: SHA256 Hash aus Gerät + Besitzer + Timestamp + +- Identifier: SHA256 Hash aus Gerät + Besitzer + Timestamp Annahmen: + - Es gibt nur eine Geräteanmeldung pro Besitzer. Mehrere Geräte pro Besitzer kann später hinzugefügt werden. - Für einen Folgetermin werden alle Daten neu eingegeben. Eine Folgereparatur auf Basis der ersten Anmeldung kann später hinzugefügt werden. @@ -115,25 +114,28 @@ Annahmen: Ein Termin ist eine Zuordnung von einem Gerät zu einem Zeitslot der Repair-Café Veranstaltung und einem Reparateur. Ein Termin ist bestätigt, wenn eine Organisator eine Termineinladung gesendet hat und er Gast diese bestätigt hat. Attribute: + - Uhrzeit: Uhrzeit des Termins - Betätigt: Boolesches Flag. True wenn eine Einladung gesendet und bestätigt wurde. Technische Attribute: -- Id: Aufsteigende Nummer des Termins + - CafeId: Referenz zum Cafe - ReparateurId: Referenz um Reparateur oder NULL - GerätId: Referenz zum Gerät -### Rückfrage +### Frage -Eine Rückfrage ist eine Zuordnung von einem Gerät zu einem Organisator oder einem Reparateur. +Eine Frage ist eine Zuordnung von einem Gerät zu einem Organisator oder einem Reparateur. Attribute: + - Frage: Frage zum Gerät oder Defekt - Antwort: Antwort des Gastes - Datum: Datum der Erstellung der Rückfrage Technische Attribute: + - OrganisatorId: Referenz zum Organisator oder NULL - ReparateurId: Referenz zum Reparateur oder NULL - GerätId: Referenz zum Gerät diff --git a/rc_hip/rc_hip/settings.py b/rc_hip/rc_hip/settings.py index ddf3d11..3879b67 100644 --- a/rc_hip/rc_hip/settings.py +++ b/rc_hip/rc_hip/settings.py @@ -31,6 +31,7 @@ ALLOWED_HOSTS = [] # Application definition INSTALLED_APPS = [ + 'repapp.apps.RepappConfig', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', @@ -105,7 +106,7 @@ AUTH_PASSWORD_VALIDATORS = [ LANGUAGE_CODE = 'en-us' -TIME_ZONE = 'UTC' +TIME_ZONE = 'Europe/Berlin' USE_I18N = True diff --git a/rc_hip/repapp/migrations/0001_initial.py b/rc_hip/repapp/migrations/0001_initial.py new file mode 100644 index 0000000..c5d90c0 --- /dev/null +++ b/rc_hip/repapp/migrations/0001_initial.py @@ -0,0 +1,62 @@ +# Generated by Django 4.2 on 2023-04-16 17:49 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Cafe', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('ort', models.CharField(max_length=200)), + ('datum', models.DateField()), + ], + ), + migrations.CreateModel( + name='Gerät', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('identifier', models.CharField(max_length=200)), + ('besitzer', models.CharField(max_length=200)), + ('mail', models.CharField(max_length=200)), + ('gerät', models.CharField(max_length=200)), + ('fehler', models.TextField()), + ('folgetermin', models.BooleanField()), + ], + ), + migrations.CreateModel( + name='Organisator', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=200)), + ('mail', models.CharField(max_length=200)), + ], + ), + migrations.CreateModel( + name='Reparateur', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=200)), + ('mail', models.CharField(max_length=200)), + ], + ), + migrations.CreateModel( + name='Termin', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('uhrzeit', models.TimeField()), + ('bestätigt', models.BooleanField()), + ('cafeid', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='repapp.cafe')), + ('gerätid', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='repapp.gerät')), + ('reparateurid', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='repapp.reparateur')), + ], + ), + ] diff --git a/rc_hip/repapp/migrations/0002_alter_termin_cafeid_alter_termin_gerätid_and_more.py b/rc_hip/repapp/migrations/0002_alter_termin_cafeid_alter_termin_gerätid_and_more.py new file mode 100644 index 0000000..ef73fc2 --- /dev/null +++ b/rc_hip/repapp/migrations/0002_alter_termin_cafeid_alter_termin_gerätid_and_more.py @@ -0,0 +1,41 @@ +# Generated by Django 4.2 on 2023-04-16 17:53 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('repapp', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='termin', + name='cafeid', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='repapp.cafe'), + ), + migrations.AlterField( + model_name='termin', + name='gerätid', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='repapp.gerät'), + ), + migrations.AlterField( + model_name='termin', + name='reparateurid', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='repapp.reparateur'), + ), + migrations.CreateModel( + name='Frage', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('frage', models.TextField()), + ('antwort', models.TextField()), + ('datum', models.DateField()), + ('gerätid', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='repapp.gerät')), + ('organisatorid', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='repapp.organisator')), + ('reparateurid', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='repapp.reparateur')), + ], + ), + ] diff --git a/rc_hip/repapp/models.py b/rc_hip/repapp/models.py index 71a8362..43d128b 100644 --- a/rc_hip/repapp/models.py +++ b/rc_hip/repapp/models.py @@ -1,3 +1,42 @@ from django.db import models -# Create your models here. + +class Cafe(models.Model): + ort = models.CharField(max_length=200) + datum = models.DateField() + + +class Reparateur(models.Model): + name = models.CharField(max_length=200) + mail = models.CharField(max_length=200) + + +class Organisator(models.Model): + name = models.CharField(max_length=200) + mail = models.CharField(max_length=200) + + +class Gerät(models.Model): + identifier = models.CharField(max_length=200) + besitzer = models.CharField(max_length=200) + mail = models.CharField(max_length=200) + gerät = models.CharField(max_length=200) + fehler = models.TextField() + folgetermin = models.BooleanField() + + +class Termin(models.Model): + uhrzeit = models.TimeField() + bestätigt = models.BooleanField() + cafeid = models.ForeignKey(Cafe, on_delete=models.CASCADE) + reparateurid = models.ForeignKey(Reparateur, on_delete=models.CASCADE) + gerätid = models.ForeignKey(Gerät, on_delete=models.CASCADE) + + +class Frage(models.Model): + frage = models.TextField() + antwort = models.TextField() + datum = models.DateField() + organisatorid = models.ForeignKey(Organisator, on_delete=models.CASCADE) + reparateurid = models.ForeignKey(Reparateur, on_delete=models.CASCADE) + gerätid = models.ForeignKey(Gerät, on_delete=models.CASCADE)