Datenmodell
This commit is contained in:
parent
af0c79f516
commit
32db5c8544
5 changed files with 160 additions and 15 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
62
rc_hip/repapp/migrations/0001_initial.py
Normal file
62
rc_hip/repapp/migrations/0001_initial.py
Normal 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')),
|
||||
],
|
||||
),
|
||||
]
|
||||
|
|
@ -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')),
|
||||
],
|
||||
),
|
||||
]
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
Reference in a new issue