Datenmodell

This commit is contained in:
Tom Irgang 2023-04-16 19:55:54 +02:00
parent af0c79f516
commit 32db5c8544
5 changed files with 160 additions and 15 deletions

View file

@ -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. Ein Cafe ist ein Repair-Café Termin.
Attribute: Attribute:
- Datum: Datum der Veranstaltung - Datum: Datum der Veranstaltung
- Ort: Beschreibung wo das Repair-Café stattfindet - Ort: Beschreibung wo das Repair-Café stattfindet
Technische Attribute:
- Id: Aufsteigende Nummer des Repair-Café
Annahmen: Annahmen:
- Ein Repair-Café beginnt um 13:00 Uhr. - Ein Repair-Café beginnt um 13:00 Uhr.
- Ein Repair-Café hat drei aufeinanderfolgende Slots mit je einer Stunde - 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. Ein Reparateur ist ein Mitglied des Repair-Cafés das Gäste bei der Reparatur ihrer Geräte unterstützt.
Attribute: Attribute:
- Name: Name des Reparateurs - Name: Name des Reparateurs
- Mail: eMail-Adresse für Benachrichtigungen - Mail: eMail-Adresse für Benachrichtigungen
Technische Attribute:
- Id: Aufsteigende Nummer des Reparateurs
Annahmen: Annahmen:
- Reparatuere sind immmer verfügbar, d.h. jeder Reparatuer wird zu einem neuen Repair-Café Termin automatisch hinzugefügt. - 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. - 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. Ein Organisator ist ein Mitglied des Repair-Cafés das Reparaturtermine mit den Gästen vereinbart.
Attribute: Attribute:
- Name: Name des Organisators - Name: Name des Organisators
- Mail: eMail-Adresse für Benachrichtigungen - Mail: eMail-Adresse für Benachrichtigungen
Technische Attribute:
- Id: Aufsteigende Nummer des Organisators
### Gerät ### Gerät
Ein Gerät ist ein defekter Gegenstand der im Rahmen eines Repair-Cafés repariert werden soll. Ein Gerät ist ein defekter Gegenstand der im Rahmen eines Repair-Cafés repariert werden soll.
Attribute: Attribute:
- Besitzer: Name des Besitzers - Besitzer: Name des Besitzers
- Mail: eMail-Adresse des Besitzers für Benachrichtigungen - Mail: eMail-Adresse des Besitzers für Benachrichtigungen
- Gerät: Bezeichnung des Geräts - Gerät: Bezeichnung des Geräts
@ -104,9 +101,11 @@ Attribute:
- Folgetermin: Boolesches Flag das anzeigt ob es sich um einen Folgetermin handelt. - Folgetermin: Boolesches Flag das anzeigt ob es sich um einen Folgetermin handelt.
Technische Attribute: Technische Attribute:
- Id: SHA256 Hash aus Gerät + Besitzer + Timestamp
- Identifier: SHA256 Hash aus Gerät + Besitzer + Timestamp
Annahmen: Annahmen:
- Es gibt nur eine Geräteanmeldung pro Besitzer. Mehrere Geräte pro Besitzer kann später hinzugefügt werden. - 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. - 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. 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: Attribute:
- Uhrzeit: Uhrzeit des Termins - Uhrzeit: Uhrzeit des Termins
- Betätigt: Boolesches Flag. True wenn eine Einladung gesendet und bestätigt wurde. - Betätigt: Boolesches Flag. True wenn eine Einladung gesendet und bestätigt wurde.
Technische Attribute: Technische Attribute:
- Id: Aufsteigende Nummer des Termins
- CafeId: Referenz zum Cafe - CafeId: Referenz zum Cafe
- ReparateurId: Referenz um Reparateur oder NULL - ReparateurId: Referenz um Reparateur oder NULL
- GerätId: Referenz zum Gerät - 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: Attribute:
- Frage: Frage zum Gerät oder Defekt - Frage: Frage zum Gerät oder Defekt
- Antwort: Antwort des Gastes - Antwort: Antwort des Gastes
- Datum: Datum der Erstellung der Rückfrage - Datum: Datum der Erstellung der Rückfrage
Technische Attribute: Technische Attribute:
- OrganisatorId: Referenz zum Organisator oder NULL - OrganisatorId: Referenz zum Organisator oder NULL
- ReparateurId: Referenz zum Reparateur oder NULL - ReparateurId: Referenz zum Reparateur oder NULL
- GerätId: Referenz zum Gerät - GerätId: Referenz zum Gerät

View file

@ -31,6 +31,7 @@ ALLOWED_HOSTS = []
# Application definition # Application definition
INSTALLED_APPS = [ INSTALLED_APPS = [
'repapp.apps.RepappConfig',
'django.contrib.admin', 'django.contrib.admin',
'django.contrib.auth', 'django.contrib.auth',
'django.contrib.contenttypes', 'django.contrib.contenttypes',
@ -105,7 +106,7 @@ AUTH_PASSWORD_VALIDATORS = [
LANGUAGE_CODE = 'en-us' LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC' TIME_ZONE = 'Europe/Berlin'
USE_I18N = True USE_I18N = True

View file

@ -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')),
],
),
]

View file

@ -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')),
],
),
]

View file

@ -1,3 +1,42 @@
from django.db import models 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)