From 82a862a1428e399da9eee9c6b5a579aa1d7c4444 Mon Sep 17 00:00:00 2001 From: faraphel-gima Date: Mon, 27 Nov 2023 14:33:28 +0100 Subject: [PATCH] implemented database following the DCM --- .gitignore | 3 +- Dockerfile | 3 - Palto/{apps/User => Palto}/__init__.py | 0 Palto/{apps/User => Palto}/admin.py | 0 Palto/{apps/User => Palto}/apps.py | 5 +- Palto/Palto/migrations/0001_initial.py | 83 +++++++++++++++++++ .../User => Palto}/migrations/__init__.py | 0 Palto/Palto/models.py | 69 +++++++++++++++ Palto/{apps/User => Palto}/tests.py | 0 Palto/{apps/User => Palto}/views.py | 0 Palto/apps/User/models.py | 3 - Palto/apps/__init__.py | 0 Palto/settings.py | 5 +- 13 files changed, 161 insertions(+), 10 deletions(-) rename Palto/{apps/User => Palto}/__init__.py (100%) rename Palto/{apps/User => Palto}/admin.py (100%) rename Palto/{apps/User => Palto}/apps.py (55%) create mode 100644 Palto/Palto/migrations/0001_initial.py rename Palto/{apps/User => Palto}/migrations/__init__.py (100%) create mode 100644 Palto/Palto/models.py rename Palto/{apps/User => Palto}/tests.py (100%) rename Palto/{apps/User => Palto}/views.py (100%) delete mode 100644 Palto/apps/User/models.py delete mode 100644 Palto/apps/__init__.py diff --git a/.gitignore b/.gitignore index 4ecc402..b2aa066 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .idea/ -Palto/db.sqlite3 +venv/ +db.sqlite3 diff --git a/Dockerfile b/Dockerfile index 3f8dd8e..dd06acd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,8 +16,5 @@ RUN pip install -r requirements.txt # Expose the port on which your Django application will run EXPOSE 80 -# Set the working directory in the Django application -WORKDIR ./Palto - # Start the Django application ENTRYPOINT ["python", "manage.py", "runserver_plus", "0.0.0.0:80"] diff --git a/Palto/apps/User/__init__.py b/Palto/Palto/__init__.py similarity index 100% rename from Palto/apps/User/__init__.py rename to Palto/Palto/__init__.py diff --git a/Palto/apps/User/admin.py b/Palto/Palto/admin.py similarity index 100% rename from Palto/apps/User/admin.py rename to Palto/Palto/admin.py diff --git a/Palto/apps/User/apps.py b/Palto/Palto/apps.py similarity index 55% rename from Palto/apps/User/apps.py rename to Palto/Palto/apps.py index fca9861..93c779b 100644 --- a/Palto/apps/User/apps.py +++ b/Palto/Palto/apps.py @@ -1,6 +1,7 @@ from django.apps import AppConfig -class UserConfig(AppConfig): +class PaltoConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' - name = "User" + name = "Palto.Palto" + label = "Palto" diff --git a/Palto/Palto/migrations/0001_initial.py b/Palto/Palto/migrations/0001_initial.py new file mode 100644 index 0000000..0af2299 --- /dev/null +++ b/Palto/Palto/migrations/0001_initial.py @@ -0,0 +1,83 @@ +# Generated by Django 4.2.7 on 2023-11-27 10:56 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import uuid + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Absence', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('message', models.TextField()), + ('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='absent_sessions', to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='TeachingUnit', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('name', models.CharField(max_length=32)), + ('managers', models.ManyToManyField(related_name='managed_teaching_units', to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='TeachingSession', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('start', models.DateTimeField()), + ('duration', models.DurationField()), + ('teacher', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='taught_sessions', to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='StudentGroup', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('name', models.CharField(max_length=32)), + ('students', models.ManyToManyField(related_name='student_groups', to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='StudentCard', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('uid', models.BinaryField(max_length=7)), + ('owner', models.ManyToManyField(related_name='student_cards', to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='Department', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('name', models.CharField(max_length=32)), + ('managers', models.ManyToManyField(related_name='managed_departments', to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='Attendance', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('date', models.DateTimeField()), + ('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attended_sessions', to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='AbsenceAttachment', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('content', models.FileField(upload_to='')), + ('absence', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attachments', to='Palto.absence')), + ], + ), + ] diff --git a/Palto/apps/User/migrations/__init__.py b/Palto/Palto/migrations/__init__.py similarity index 100% rename from Palto/apps/User/migrations/__init__.py rename to Palto/Palto/migrations/__init__.py diff --git a/Palto/Palto/models.py b/Palto/Palto/models.py new file mode 100644 index 0000000..2a51dba --- /dev/null +++ b/Palto/Palto/models.py @@ -0,0 +1,69 @@ +import uuid +from datetime import datetime, timedelta + +from django.contrib.auth import get_user_model +from django.db import models + + +# Create your models here. +class Department(models.Model): + id: uuid.UUID = models.UUIDField(default=uuid.uuid4, primary_key=True, editable=False, max_length=36) + name: str = models.CharField(max_length=32) + + managers = models.ManyToManyField(to=get_user_model(), related_name="managed_departments") + teachers = models.ManyToManyField(to=get_user_model(), related_name="taught_departments") + students = models.ManyToManyField(to=get_user_model(), related_name="study_departments") + + +class StudentGroup(models.Model): + id: uuid.UUID = models.UUIDField(default=uuid.uuid4, primary_key=True, editable=False, max_length=36) + name: str = models.CharField(max_length=32) + + students = models.ManyToManyField(to=get_user_model(), related_name="student_groups") + + +class TeachingUnit(models.Model): + id: uuid.UUID = models.UUIDField(default=uuid.uuid4, primary_key=True, editable=False, max_length=36) + name: str = models.CharField(max_length=32) + + student_groups = models.ManyToManyField(to=StudentGroup, related_name="taught_units") + + +class StudentCard(models.Model): + id: uuid.UUID = models.UUIDField(default=uuid.uuid4, primary_key=True, editable=False, max_length=36) + uid: bytes = models.BinaryField(max_length=7) + + owner = models.ManyToManyField(to=get_user_model(), related_name="student_cards") + + +class TeachingSession(models.Model): + id: uuid.UUID = models.UUIDField(default=uuid.uuid4, primary_key=True, editable=False, max_length=36) + start: datetime = models.DateTimeField() + duration: timedelta = models.DurationField() + + teacher = models.ForeignKey(to=get_user_model(), on_delete=models.CASCADE, related_name="taught_sessions") + + @property + def end(self) -> datetime: + return self.start + self.duration + + +class Attendance(models.Model): + id: uuid.UUID = models.UUIDField(default=uuid.uuid4, primary_key=True, editable=False, max_length=36) + date: datetime = models.DateTimeField() + + student = models.ForeignKey(to=get_user_model(), on_delete=models.CASCADE, related_name="attended_sessions") + + +class Absence(models.Model): + id: uuid.UUID = models.UUIDField(default=uuid.uuid4, primary_key=True, editable=False, max_length=36) + message: str = models.TextField() + + student = models.ForeignKey(to=get_user_model(), on_delete=models.CASCADE, related_name="absent_sessions") + + +class AbsenceAttachment(models.Model): + id: uuid.UUID = models.UUIDField(default=uuid.uuid4, primary_key=True, editable=False, max_length=36) + content = models.FileField() + + absence = models.ForeignKey(to=Absence, on_delete=models.CASCADE, related_name="attachments") diff --git a/Palto/apps/User/tests.py b/Palto/Palto/tests.py similarity index 100% rename from Palto/apps/User/tests.py rename to Palto/Palto/tests.py diff --git a/Palto/apps/User/views.py b/Palto/Palto/views.py similarity index 100% rename from Palto/apps/User/views.py rename to Palto/Palto/views.py diff --git a/Palto/apps/User/models.py b/Palto/apps/User/models.py deleted file mode 100644 index 71a8362..0000000 --- a/Palto/apps/User/models.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.db import models - -# Create your models here. diff --git a/Palto/apps/__init__.py b/Palto/apps/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/Palto/settings.py b/Palto/settings.py index d5cb7d9..571e83d 100644 --- a/Palto/settings.py +++ b/Palto/settings.py @@ -51,7 +51,7 @@ INSTALLED_APPS = [ "debug_toolbar", 'django_extensions', - "Palto.apps.User.apps", + "Palto.Palto", ] MIDDLEWARE = [ @@ -147,3 +147,6 @@ REST_FRAMEWORK = { 'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly' ] } + +# User +AUTH_USER_MODEL = "Palto.models.User"