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.
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

View file

@ -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

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
# 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)