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