From e8178fa36a6af7b7e616cbb411c0ff916590e0be Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Fri, 14 Jul 2023 17:14:00 +0200 Subject: [PATCH] Format code --- server/config/urls.py | 6 +- .../assignment/migrations/0001_initial.py | 346 ++++++++++-- ...nmentcompletionauditlog_assignment_user.py | 15 +- .../assignment/migrations/0003_initial.py | 93 +++- .../competence/migrations/0001_initial.py | 76 ++- .../0002_performancecriteria_learning_unit.py | 17 +- .../contrib/sites/migrations/0001_initial.py | 39 +- .../core/migrations/0001_initial.py | 207 ++++++-- .../course/migrations/0001_initial.py | 217 ++++++-- .../course/migrations/0002_initial.py | 113 ++-- .../course_session/migrations/0001_initial.py | 45 +- ..._coursesessionattendancecourse_due_date.py | 16 +- .../course_session/migrations/0003_initial.py | 58 +- .../duedate/migrations/0001_initial.py | 55 +- .../feedback/migrations/0001_initial.py | 22 +- .../feedback/migrations/0002_initial.py | 24 +- .../files/migrations/0001_initial.py | 44 +- .../learnpath/migrations/0001_initial.py | 499 +++++++++++++----- .../media_library/migrations/0001_initial.py | 371 +++++++++++-- .../notify/migrations/0001_initial.py | 182 +++++-- 20 files changed, 1941 insertions(+), 504 deletions(-) diff --git a/server/config/urls.py b/server/config/urls.py index 30d1ecbb..00ea7d18 100644 --- a/server/config/urls.py +++ b/server/config/urls.py @@ -10,9 +10,6 @@ from django.views import defaults as default_views from django.views.decorators.csrf import csrf_exempt from graphene_django.views import GraphQLView from ratelimit.exceptions import Ratelimited -from wagtail import urls as wagtail_urls -from wagtail.admin import urls as wagtailadmin_urls -from wagtail.documents import urls as wagtaildocs_urls from vbv_lernwelt.assignment.views import request_assignment_completion_status from vbv_lernwelt.core.middleware.auth import django_view_authentication_exempt @@ -45,6 +42,9 @@ from vbv_lernwelt.feedback.views import ( get_feedback_for_circle, ) from vbv_lernwelt.notify.views import email_notification_settings +from wagtail import urls as wagtail_urls +from wagtail.admin import urls as wagtailadmin_urls +from wagtail.documents import urls as wagtaildocs_urls class SignedIntConverter(IntConverter): diff --git a/server/vbv_lernwelt/assignment/migrations/0001_initial.py b/server/vbv_lernwelt/assignment/migrations/0001_initial.py index 6d296c2b..426909d4 100644 --- a/server/vbv_lernwelt/assignment/migrations/0001_initial.py +++ b/server/vbv_lernwelt/assignment/migrations/0001_initial.py @@ -1,10 +1,11 @@ # Generated by Django 3.2.13 on 2023-07-14 12:28 -from django.db import migrations, models -import django.db.models.deletion import uuid + +import django.db.models.deletion import wagtail.blocks import wagtail.fields +from django.db import migrations, models class Migration(migrations.Migration): @@ -12,67 +13,328 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('wagtailcore', '0083_workflowcontenttype'), + ("wagtailcore", "0083_workflowcontenttype"), ] operations = [ migrations.CreateModel( - name='Assignment', + name="Assignment", fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')), - ('assignment_type', models.CharField(choices=[('CASEWORK', 'CASEWORK'), ('PREP_ASSIGNMENT', 'PREP_ASSIGNMENT'), ('REFLECTION', 'REFLECTION')], default='CASEWORK', max_length=50)), - ('intro_text', wagtail.fields.RichTextField(help_text='Erläuterung der Ausgangslage')), - ('effort_required', models.CharField(blank=True, help_text='Zeitaufwand als Text', max_length=100)), - ('performance_objectives', wagtail.fields.StreamField([('performance_objective', wagtail.blocks.StructBlock([('text', wagtail.blocks.TextBlock())]))], blank=True, help_text='Leistungsziele des Auftrags', use_json_field=True)), - ('tasks', wagtail.fields.StreamField([('task', wagtail.blocks.StructBlock([('title', wagtail.blocks.TextBlock()), ('file_submission_required', wagtail.blocks.BooleanBlock(required=False)), ('content', wagtail.blocks.StreamBlock([('explanation', wagtail.blocks.StructBlock([('text', wagtail.blocks.RichTextBlock(features=['ul', 'bold', 'italic']))])), ('user_text_input', wagtail.blocks.StructBlock([('text', wagtail.blocks.RichTextBlock(blank=True, features=['ul', 'bold', 'italic'], required=False))])), ('user_confirmation', wagtail.blocks.StructBlock([('text', wagtail.blocks.RichTextBlock(features=['ul', 'bold', 'italic']))]))], blank=True))]))], blank=True, help_text='Teilaufgaben', use_json_field=True)), - ('evaluation_description', wagtail.fields.RichTextField(blank=True, help_text='Beschreibung der Bewertung')), - ('evaluation_document_url', models.CharField(blank=True, help_text='URL zum Beurteilungsinstrument', max_length=255)), - ('evaluation_tasks', wagtail.fields.StreamField([('task', wagtail.blocks.StructBlock([('title', wagtail.blocks.TextBlock()), ('description', wagtail.blocks.RichTextBlock(blank=True, features=['ul', 'bold', 'italic'], required=False)), ('max_points', wagtail.blocks.IntegerBlock()), ('sub_tasks', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('title', wagtail.blocks.TextBlock()), ('description', wagtail.blocks.RichTextBlock(blank=True, features=['ul', 'bold', 'italic'], required=False)), ('points', wagtail.blocks.IntegerBlock())]), blank=True, use_json_field=True))]))], blank=True, help_text='Beurteilungsschritte', use_json_field=True)), + ( + "page_ptr", + models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to="wagtailcore.page", + ), + ), + ( + "assignment_type", + models.CharField( + choices=[ + ("CASEWORK", "CASEWORK"), + ("PREP_ASSIGNMENT", "PREP_ASSIGNMENT"), + ("REFLECTION", "REFLECTION"), + ], + default="CASEWORK", + max_length=50, + ), + ), + ( + "intro_text", + wagtail.fields.RichTextField( + help_text="Erläuterung der Ausgangslage" + ), + ), + ( + "effort_required", + models.CharField( + blank=True, help_text="Zeitaufwand als Text", max_length=100 + ), + ), + ( + "performance_objectives", + wagtail.fields.StreamField( + [ + ( + "performance_objective", + wagtail.blocks.StructBlock( + [("text", wagtail.blocks.TextBlock())] + ), + ) + ], + blank=True, + help_text="Leistungsziele des Auftrags", + use_json_field=True, + ), + ), + ( + "tasks", + wagtail.fields.StreamField( + [ + ( + "task", + wagtail.blocks.StructBlock( + [ + ("title", wagtail.blocks.TextBlock()), + ( + "file_submission_required", + wagtail.blocks.BooleanBlock(required=False), + ), + ( + "content", + wagtail.blocks.StreamBlock( + [ + ( + "explanation", + wagtail.blocks.StructBlock( + [ + ( + "text", + wagtail.blocks.RichTextBlock( + features=[ + "ul", + "bold", + "italic", + ] + ), + ) + ] + ), + ), + ( + "user_text_input", + wagtail.blocks.StructBlock( + [ + ( + "text", + wagtail.blocks.RichTextBlock( + blank=True, + features=[ + "ul", + "bold", + "italic", + ], + required=False, + ), + ) + ] + ), + ), + ( + "user_confirmation", + wagtail.blocks.StructBlock( + [ + ( + "text", + wagtail.blocks.RichTextBlock( + features=[ + "ul", + "bold", + "italic", + ] + ), + ) + ] + ), + ), + ], + blank=True, + ), + ), + ] + ), + ) + ], + blank=True, + help_text="Teilaufgaben", + use_json_field=True, + ), + ), + ( + "evaluation_description", + wagtail.fields.RichTextField( + blank=True, help_text="Beschreibung der Bewertung" + ), + ), + ( + "evaluation_document_url", + models.CharField( + blank=True, + help_text="URL zum Beurteilungsinstrument", + max_length=255, + ), + ), + ( + "evaluation_tasks", + wagtail.fields.StreamField( + [ + ( + "task", + wagtail.blocks.StructBlock( + [ + ("title", wagtail.blocks.TextBlock()), + ( + "description", + wagtail.blocks.RichTextBlock( + blank=True, + features=["ul", "bold", "italic"], + required=False, + ), + ), + ("max_points", wagtail.blocks.IntegerBlock()), + ( + "sub_tasks", + wagtail.blocks.ListBlock( + wagtail.blocks.StructBlock( + [ + ( + "title", + wagtail.blocks.TextBlock(), + ), + ( + "description", + wagtail.blocks.RichTextBlock( + blank=True, + features=[ + "ul", + "bold", + "italic", + ], + required=False, + ), + ), + ( + "points", + wagtail.blocks.IntegerBlock(), + ), + ] + ), + blank=True, + use_json_field=True, + ), + ), + ] + ), + ) + ], + blank=True, + help_text="Beurteilungsschritte", + use_json_field=True, + ), + ), ], options={ - 'verbose_name': 'Auftrag', + "verbose_name": "Auftrag", }, - bases=('wagtailcore.page',), + bases=("wagtailcore.page",), ), migrations.CreateModel( - name='AssignmentCompletion', + name="AssignmentCompletion", fields=[ - ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), - ('created_at', models.DateTimeField(auto_now_add=True)), - ('updated_at', models.DateTimeField(auto_now=True)), - ('submitted_at', models.DateTimeField(blank=True, null=True)), - ('evaluation_submitted_at', models.DateTimeField(blank=True, null=True)), - ('evaluation_grade', models.FloatField(blank=True, null=True)), - ('evaluation_points', models.FloatField(blank=True, null=True)), - ('completion_status', models.CharField(choices=[('IN_PROGRESS', 'IN_PROGRESS'), ('SUBMITTED', 'SUBMITTED'), ('EVALUATION_IN_PROGRESS', 'EVALUATION_IN_PROGRESS'), ('EVALUATION_SUBMITTED', 'EVALUATION_SUBMITTED')], default='IN_PROGRESS', max_length=255)), - ('completion_data', models.JSONField(default=dict)), - ('additional_json_data', models.JSONField(default=dict)), + ( + "id", + models.UUIDField( + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + ), + ), + ("created_at", models.DateTimeField(auto_now_add=True)), + ("updated_at", models.DateTimeField(auto_now=True)), + ("submitted_at", models.DateTimeField(blank=True, null=True)), + ( + "evaluation_submitted_at", + models.DateTimeField(blank=True, null=True), + ), + ("evaluation_grade", models.FloatField(blank=True, null=True)), + ("evaluation_points", models.FloatField(blank=True, null=True)), + ( + "completion_status", + models.CharField( + choices=[ + ("IN_PROGRESS", "IN_PROGRESS"), + ("SUBMITTED", "SUBMITTED"), + ("EVALUATION_IN_PROGRESS", "EVALUATION_IN_PROGRESS"), + ("EVALUATION_SUBMITTED", "EVALUATION_SUBMITTED"), + ], + default="IN_PROGRESS", + max_length=255, + ), + ), + ("completion_data", models.JSONField(default=dict)), + ("additional_json_data", models.JSONField(default=dict)), ], ), migrations.CreateModel( - name='AssignmentListPage', + name="AssignmentListPage", fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')), + ( + "page_ptr", + models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to="wagtailcore.page", + ), + ), ], options={ - 'abstract': False, + "abstract": False, }, - bases=('wagtailcore.page',), + bases=("wagtailcore.page",), ), migrations.CreateModel( - name='AssignmentCompletionAuditLog', + name="AssignmentCompletionAuditLog", fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created_at', models.DateTimeField(auto_now_add=True)), - ('completion_status', models.CharField(choices=[('IN_PROGRESS', 'IN_PROGRESS'), ('SUBMITTED', 'SUBMITTED'), ('EVALUATION_IN_PROGRESS', 'EVALUATION_IN_PROGRESS'), ('EVALUATION_SUBMITTED', 'EVALUATION_SUBMITTED')], default='IN_PROGRESS', max_length=255)), - ('completion_data', models.JSONField(default=dict)), - ('additional_json_data', models.JSONField(default=dict)), - ('assignment_user_email', models.CharField(max_length=255)), - ('assignment_slug', models.CharField(max_length=255)), - ('evaluation_user_email', models.CharField(blank=True, default='', max_length=255)), - ('evaluation_grade', models.FloatField(blank=True, null=True)), - ('evaluation_points', models.FloatField(blank=True, null=True)), - ('assignment', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='assignment.assignment')), + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("created_at", models.DateTimeField(auto_now_add=True)), + ( + "completion_status", + models.CharField( + choices=[ + ("IN_PROGRESS", "IN_PROGRESS"), + ("SUBMITTED", "SUBMITTED"), + ("EVALUATION_IN_PROGRESS", "EVALUATION_IN_PROGRESS"), + ("EVALUATION_SUBMITTED", "EVALUATION_SUBMITTED"), + ], + default="IN_PROGRESS", + max_length=255, + ), + ), + ("completion_data", models.JSONField(default=dict)), + ("additional_json_data", models.JSONField(default=dict)), + ("assignment_user_email", models.CharField(max_length=255)), + ("assignment_slug", models.CharField(max_length=255)), + ( + "evaluation_user_email", + models.CharField(blank=True, default="", max_length=255), + ), + ("evaluation_grade", models.FloatField(blank=True, null=True)), + ("evaluation_points", models.FloatField(blank=True, null=True)), + ( + "assignment", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="+", + to="assignment.assignment", + ), + ), ], ), ] diff --git a/server/vbv_lernwelt/assignment/migrations/0002_assignmentcompletionauditlog_assignment_user.py b/server/vbv_lernwelt/assignment/migrations/0002_assignmentcompletionauditlog_assignment_user.py index a22f627f..261ddcf8 100644 --- a/server/vbv_lernwelt/assignment/migrations/0002_assignmentcompletionauditlog_assignment_user.py +++ b/server/vbv_lernwelt/assignment/migrations/0002_assignmentcompletionauditlog_assignment_user.py @@ -1,8 +1,8 @@ # Generated by Django 3.2.13 on 2023-07-14 12:28 +import django.db.models.deletion from django.conf import settings from django.db import migrations, models -import django.db.models.deletion class Migration(migrations.Migration): @@ -11,13 +11,18 @@ class Migration(migrations.Migration): dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('assignment', '0001_initial'), + ("assignment", "0001_initial"), ] operations = [ migrations.AddField( - model_name='assignmentcompletionauditlog', - name='assignment_user', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL), + model_name="assignmentcompletionauditlog", + name="assignment_user", + field=models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="+", + to=settings.AUTH_USER_MODEL, + ), ), ] diff --git a/server/vbv_lernwelt/assignment/migrations/0003_initial.py b/server/vbv_lernwelt/assignment/migrations/0003_initial.py index e0c91528..553a518a 100644 --- a/server/vbv_lernwelt/assignment/migrations/0003_initial.py +++ b/server/vbv_lernwelt/assignment/migrations/0003_initial.py @@ -1,8 +1,8 @@ # Generated by Django 3.2.13 on 2023-07-14 12:28 +import django.db.models.deletion from django.conf import settings from django.db import migrations, models -import django.db.models.deletion class Migration(migrations.Migration): @@ -11,49 +11,88 @@ class Migration(migrations.Migration): dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('assignment', '0002_assignmentcompletionauditlog_assignment_user'), - ('course', '0001_initial'), - ('wagtailcore', '0083_workflowcontenttype'), + ("assignment", "0002_assignmentcompletionauditlog_assignment_user"), + ("course", "0001_initial"), + ("wagtailcore", "0083_workflowcontenttype"), ] operations = [ migrations.AddField( - model_name='assignmentcompletionauditlog', - name='course_session', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='course.coursesession'), + model_name="assignmentcompletionauditlog", + name="course_session", + field=models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="+", + to="course.coursesession", + ), ), migrations.AddField( - model_name='assignmentcompletionauditlog', - name='evaluation_user', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL), + model_name="assignmentcompletionauditlog", + name="evaluation_user", + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="+", + to=settings.AUTH_USER_MODEL, + ), ), migrations.AddField( - model_name='assignmentcompletion', - name='assignment', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='assignment.assignment'), + model_name="assignmentcompletion", + name="assignment", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to="assignment.assignment" + ), ), migrations.AddField( - model_name='assignmentcompletion', - name='assignment_user', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + model_name="assignmentcompletion", + name="assignment_user", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL + ), ), migrations.AddField( - model_name='assignmentcompletion', - name='course_session', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='course.coursesession'), + model_name="assignmentcompletion", + name="course_session", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to="course.coursesession" + ), ), migrations.AddField( - model_name='assignmentcompletion', - name='evaluation_user', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to=settings.AUTH_USER_MODEL), + model_name="assignmentcompletion", + name="evaluation_user", + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="+", + to=settings.AUTH_USER_MODEL, + ), ), migrations.AddField( - model_name='assignmentcompletion', - name='learning_content_page', - field=models.ForeignKey(blank=True, default=None, help_text="Page reference mostly needed for 'REFLECTION' assignments", null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailcore.page'), + model_name="assignmentcompletion", + name="learning_content_page", + field=models.ForeignKey( + blank=True, + default=None, + help_text="Page reference mostly needed for 'REFLECTION' assignments", + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="+", + to="wagtailcore.page", + ), ), migrations.AddConstraint( - model_name='assignmentcompletion', - constraint=models.UniqueConstraint(fields=('assignment_user', 'assignment', 'course_session', 'learning_content_page'), name='assignment_completion_unique_user_assignment_course_session'), + model_name="assignmentcompletion", + constraint=models.UniqueConstraint( + fields=( + "assignment_user", + "assignment", + "course_session", + "learning_content_page", + ), + name="assignment_completion_unique_user_assignment_course_session", + ), ), ] diff --git a/server/vbv_lernwelt/competence/migrations/0001_initial.py b/server/vbv_lernwelt/competence/migrations/0001_initial.py index 5880ce62..a857392c 100644 --- a/server/vbv_lernwelt/competence/migrations/0001_initial.py +++ b/server/vbv_lernwelt/competence/migrations/0001_initial.py @@ -1,9 +1,9 @@ # Generated by Django 3.2.13 on 2023-07-14 12:28 -from django.db import migrations, models import django.db.models.deletion import wagtail.blocks import wagtail.fields +from django.db import migrations, models class Migration(migrations.Migration): @@ -11,43 +11,81 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('wagtailcore', '0083_workflowcontenttype'), + ("wagtailcore", "0083_workflowcontenttype"), ] operations = [ migrations.CreateModel( - name='CompetencePage', + name="CompetencePage", fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')), - ('competence_id', models.TextField(default='A1')), - ('items', wagtail.fields.StreamField([('item', wagtail.blocks.TextBlock())], use_json_field=True)), + ( + "page_ptr", + models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to="wagtailcore.page", + ), + ), + ("competence_id", models.TextField(default="A1")), + ( + "items", + wagtail.fields.StreamField( + [("item", wagtail.blocks.TextBlock())], use_json_field=True + ), + ), ], options={ - 'abstract': False, + "abstract": False, }, - bases=('wagtailcore.page',), + bases=("wagtailcore.page",), ), migrations.CreateModel( - name='CompetenceProfilePage', + name="CompetenceProfilePage", fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')), + ( + "page_ptr", + models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to="wagtailcore.page", + ), + ), ], options={ - 'abstract': False, + "abstract": False, }, - bases=('wagtailcore.page',), + bases=("wagtailcore.page",), ), migrations.CreateModel( - name='PerformanceCriteria', + name="PerformanceCriteria", fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')), - ('competence_id', models.TextField(default='A1.1')), - ('has_course_completion_status', models.BooleanField(default=True)), - ('can_user_self_toggle_course_completion', models.BooleanField(default=True)), + ( + "page_ptr", + models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to="wagtailcore.page", + ), + ), + ("competence_id", models.TextField(default="A1.1")), + ("has_course_completion_status", models.BooleanField(default=True)), + ( + "can_user_self_toggle_course_completion", + models.BooleanField(default=True), + ), ], options={ - 'abstract': False, + "abstract": False, }, - bases=('wagtailcore.page',), + bases=("wagtailcore.page",), ), ] diff --git a/server/vbv_lernwelt/competence/migrations/0002_performancecriteria_learning_unit.py b/server/vbv_lernwelt/competence/migrations/0002_performancecriteria_learning_unit.py index e9abc826..890ac6c1 100644 --- a/server/vbv_lernwelt/competence/migrations/0002_performancecriteria_learning_unit.py +++ b/server/vbv_lernwelt/competence/migrations/0002_performancecriteria_learning_unit.py @@ -1,7 +1,7 @@ # Generated by Django 3.2.13 on 2023-07-14 12:28 -from django.db import migrations, models import django.db.models.deletion +from django.db import migrations, models class Migration(migrations.Migration): @@ -9,14 +9,19 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('competence', '0001_initial'), - ('learnpath', '0001_initial'), + ("competence", "0001_initial"), + ("learnpath", "0001_initial"), ] operations = [ migrations.AddField( - model_name='performancecriteria', - name='learning_unit', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='learnpath.learningunit'), + model_name="performancecriteria", + name="learning_unit", + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + to="learnpath.learningunit", + ), ), ] diff --git a/server/vbv_lernwelt/contrib/sites/migrations/0001_initial.py b/server/vbv_lernwelt/contrib/sites/migrations/0001_initial.py index 94cb993d..297ae556 100644 --- a/server/vbv_lernwelt/contrib/sites/migrations/0001_initial.py +++ b/server/vbv_lernwelt/contrib/sites/migrations/0001_initial.py @@ -8,25 +8,42 @@ class Migration(migrations.Migration): initial = True - dependencies = [ - ] + dependencies = [] operations = [ migrations.CreateModel( - name='Site', + name="Site", fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('domain', models.CharField(max_length=100, unique=True, validators=[django.contrib.sites.models._simple_domain_name_validator], verbose_name='domain name')), - ('name', models.CharField(max_length=50, verbose_name='display name')), + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "domain", + models.CharField( + max_length=100, + unique=True, + validators=[ + django.contrib.sites.models._simple_domain_name_validator + ], + verbose_name="domain name", + ), + ), + ("name", models.CharField(max_length=50, verbose_name="display name")), ], options={ - 'verbose_name': 'site', - 'verbose_name_plural': 'sites', - 'db_table': 'django_site', - 'ordering': ['domain'], + "verbose_name": "site", + "verbose_name_plural": "sites", + "db_table": "django_site", + "ordering": ["domain"], }, managers=[ - ('objects', django.contrib.sites.models.SiteManager()), + ("objects", django.contrib.sites.models.SiteManager()), ], ), ] diff --git a/server/vbv_lernwelt/core/migrations/0001_initial.py b/server/vbv_lernwelt/core/migrations/0001_initial.py index ca8955ff..e196649b 100644 --- a/server/vbv_lernwelt/core/migrations/0001_initial.py +++ b/server/vbv_lernwelt/core/migrations/0001_initial.py @@ -1,10 +1,11 @@ # Generated by Django 3.2.13 on 2023-07-14 12:28 +import uuid + import django.contrib.auth.models import django.contrib.auth.validators -from django.db import migrations, models import django.utils.timezone -import uuid +from django.db import migrations, models class Migration(migrations.Migration): @@ -12,51 +13,189 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('auth', '0012_alter_user_first_name_max_length'), + ("auth", "0012_alter_user_first_name_max_length"), ] operations = [ migrations.CreateModel( - name='SecurityRequestResponseLog', + name="SecurityRequestResponseLog", fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('label', models.CharField(blank=True, default='', max_length=255)), - ('request_method', models.CharField(blank=True, default='', max_length=255)), - ('request_full_path', models.CharField(blank=True, default='', max_length=255)), - ('request_username', models.CharField(blank=True, default='', max_length=255)), - ('request_client_ip', models.CharField(blank=True, default='', max_length=255)), - ('response_status_code', models.CharField(blank=True, default='', max_length=255)), - ('additional_json_data', models.JSONField(blank=True, default=dict)), + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("label", models.CharField(blank=True, default="", max_length=255)), + ( + "request_method", + models.CharField(blank=True, default="", max_length=255), + ), + ( + "request_full_path", + models.CharField(blank=True, default="", max_length=255), + ), + ( + "request_username", + models.CharField(blank=True, default="", max_length=255), + ), + ( + "request_client_ip", + models.CharField(blank=True, default="", max_length=255), + ), + ( + "response_status_code", + models.CharField(blank=True, default="", max_length=255), + ), + ("additional_json_data", models.JSONField(blank=True, default=dict)), ], ), migrations.CreateModel( - name='User', + name="User", fields=[ - ('password', models.CharField(max_length=128, verbose_name='password')), - ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), - ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), - ('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')), - ('first_name', models.CharField(blank=True, max_length=150, verbose_name='first name')), - ('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')), - ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')), - ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')), - ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')), - ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), - ('avatar_url', models.CharField(blank=True, default='/static/avatars/myvbv-default-avatar.png', max_length=254)), - ('email', models.EmailField(max_length=254, unique=True, verbose_name='email address')), - ('sso_id', models.UUIDField(blank=True, default=None, null=True, unique=True, verbose_name='SSO subscriber ID')), - ('additional_json_data', models.JSONField(blank=True, default=dict)), - ('language', models.CharField(choices=[('de', 'Deutsch'), ('fr', 'Français'), ('it', 'Italiano')], default='de', max_length=2)), - ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups')), - ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions')), + ("password", models.CharField(max_length=128, verbose_name="password")), + ( + "last_login", + models.DateTimeField( + blank=True, null=True, verbose_name="last login" + ), + ), + ( + "is_superuser", + models.BooleanField( + default=False, + help_text="Designates that this user has all permissions without explicitly assigning them.", + verbose_name="superuser status", + ), + ), + ( + "username", + models.CharField( + error_messages={ + "unique": "A user with that username already exists." + }, + help_text="Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.", + max_length=150, + unique=True, + validators=[ + django.contrib.auth.validators.UnicodeUsernameValidator() + ], + verbose_name="username", + ), + ), + ( + "first_name", + models.CharField( + blank=True, max_length=150, verbose_name="first name" + ), + ), + ( + "last_name", + models.CharField( + blank=True, max_length=150, verbose_name="last name" + ), + ), + ( + "is_staff", + models.BooleanField( + default=False, + help_text="Designates whether the user can log into this admin site.", + verbose_name="staff status", + ), + ), + ( + "is_active", + models.BooleanField( + default=True, + help_text="Designates whether this user should be treated as active. Unselect this instead of deleting accounts.", + verbose_name="active", + ), + ), + ( + "date_joined", + models.DateTimeField( + default=django.utils.timezone.now, verbose_name="date joined" + ), + ), + ( + "id", + models.UUIDField( + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + ), + ), + ( + "avatar_url", + models.CharField( + blank=True, + default="/static/avatars/myvbv-default-avatar.png", + max_length=254, + ), + ), + ( + "email", + models.EmailField( + max_length=254, unique=True, verbose_name="email address" + ), + ), + ( + "sso_id", + models.UUIDField( + blank=True, + default=None, + null=True, + unique=True, + verbose_name="SSO subscriber ID", + ), + ), + ("additional_json_data", models.JSONField(blank=True, default=dict)), + ( + "language", + models.CharField( + choices=[ + ("de", "Deutsch"), + ("fr", "Français"), + ("it", "Italiano"), + ], + default="de", + max_length=2, + ), + ), + ( + "groups", + models.ManyToManyField( + blank=True, + help_text="The groups this user belongs to. A user will get all permissions granted to each of their groups.", + related_name="user_set", + related_query_name="user", + to="auth.Group", + verbose_name="groups", + ), + ), + ( + "user_permissions", + models.ManyToManyField( + blank=True, + help_text="Specific permissions for this user.", + related_name="user_set", + related_query_name="user", + to="auth.Permission", + verbose_name="user permissions", + ), + ), ], options={ - 'verbose_name': 'user', - 'verbose_name_plural': 'users', - 'abstract': False, + "verbose_name": "user", + "verbose_name_plural": "users", + "abstract": False, }, managers=[ - ('objects', django.contrib.auth.models.UserManager()), + ("objects", django.contrib.auth.models.UserManager()), ], ), ] diff --git a/server/vbv_lernwelt/course/migrations/0001_initial.py b/server/vbv_lernwelt/course/migrations/0001_initial.py index 42a76e70..730fc62f 100644 --- a/server/vbv_lernwelt/course/migrations/0001_initial.py +++ b/server/vbv_lernwelt/course/migrations/0001_initial.py @@ -1,8 +1,10 @@ # Generated by Django 3.2.13 on 2023-07-14 12:28 -from django.db import migrations, models -import django.db.models.deletion import uuid + +import django.db.models.deletion +from django.db import migrations, models + import vbv_lernwelt.course.models @@ -11,83 +13,206 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('wagtailcore', '0083_workflowcontenttype'), + ("wagtailcore", "0083_workflowcontenttype"), ] operations = [ migrations.CreateModel( - name='CircleDocument', + name="CircleDocument", fields=[ - ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), - ('created_at', models.DateTimeField(auto_now_add=True)), - ('name', models.CharField(max_length=100)), + ( + "id", + models.UUIDField( + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + ), + ), + ("created_at", models.DateTimeField(auto_now_add=True)), + ("name", models.CharField(max_length=100)), ], ), migrations.CreateModel( - name='Course', + name="Course", fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=255, verbose_name='Titel')), - ('category_name', models.CharField(default='Kategorie', max_length=255, verbose_name='Kategorie-Name')), - ('slug', models.SlugField(allow_unicode=True, blank=True, max_length=255, unique=True, verbose_name='Slug')), + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("title", models.CharField(max_length=255, verbose_name="Titel")), + ( + "category_name", + models.CharField( + default="Kategorie", + max_length=255, + verbose_name="Kategorie-Name", + ), + ), + ( + "slug", + models.SlugField( + allow_unicode=True, + blank=True, + max_length=255, + unique=True, + verbose_name="Slug", + ), + ), ], options={ - 'verbose_name': 'Lehrgang', + "verbose_name": "Lehrgang", }, ), migrations.CreateModel( - name='CourseCategory', + name="CourseCategory", fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(blank=True, max_length=255, verbose_name='Titel')), - ('general', models.BooleanField(default=False, verbose_name='Allgemein')), + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "title", + models.CharField(blank=True, max_length=255, verbose_name="Titel"), + ), + ( + "general", + models.BooleanField(default=False, verbose_name="Allgemein"), + ), ], ), migrations.CreateModel( - name='CourseCompletion', + name="CourseCompletion", fields=[ - ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), - ('created_at', models.DateTimeField(auto_now_add=True)), - ('updated_at', models.DateTimeField(auto_now=True)), - ('page_type', models.CharField(blank=True, default='', max_length=255)), - ('completion_status', models.CharField(choices=[(vbv_lernwelt.course.models.CourseCompletionStatus['SUCCESS'], 'SUCCESS'), (vbv_lernwelt.course.models.CourseCompletionStatus['FAIL'], 'FAIL'), (vbv_lernwelt.course.models.CourseCompletionStatus['UNKNOWN'], 'UNKNOWN')], default='UNKNOWN', max_length=255)), - ('additional_json_data', models.JSONField(default=dict)), + ( + "id", + models.UUIDField( + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + ), + ), + ("created_at", models.DateTimeField(auto_now_add=True)), + ("updated_at", models.DateTimeField(auto_now=True)), + ("page_type", models.CharField(blank=True, default="", max_length=255)), + ( + "completion_status", + models.CharField( + choices=[ + ( + vbv_lernwelt.course.models.CourseCompletionStatus[ + "SUCCESS" + ], + "SUCCESS", + ), + ( + vbv_lernwelt.course.models.CourseCompletionStatus[ + "FAIL" + ], + "FAIL", + ), + ( + vbv_lernwelt.course.models.CourseCompletionStatus[ + "UNKNOWN" + ], + "UNKNOWN", + ), + ], + default="UNKNOWN", + max_length=255, + ), + ), + ("additional_json_data", models.JSONField(default=dict)), ], ), migrations.CreateModel( - name='CoursePage', + name="CoursePage", fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')), + ( + "page_ptr", + models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to="wagtailcore.page", + ), + ), ], options={ - 'verbose_name': 'Lehrgang-Seite', + "verbose_name": "Lehrgang-Seite", }, - bases=('wagtailcore.page',), + bases=("wagtailcore.page",), ), migrations.CreateModel( - name='CourseSession', + name="CourseSession", fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created_at', models.DateTimeField(auto_now_add=True)), - ('updated_at', models.DateTimeField(auto_now=True)), - ('title', models.TextField(unique=True)), - ('import_id', models.TextField(blank=True, default='')), - ('generation', models.TextField(blank=True, default='')), - ('region', models.TextField(blank=True, default='')), - ('group', models.TextField(blank=True, default='')), - ('start_date', models.DateField(blank=True, null=True)), - ('end_date', models.DateField(blank=True, null=True)), - ('additional_json_data', models.JSONField(blank=True, default=dict)), + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("created_at", models.DateTimeField(auto_now_add=True)), + ("updated_at", models.DateTimeField(auto_now=True)), + ("title", models.TextField(unique=True)), + ("import_id", models.TextField(blank=True, default="")), + ("generation", models.TextField(blank=True, default="")), + ("region", models.TextField(blank=True, default="")), + ("group", models.TextField(blank=True, default="")), + ("start_date", models.DateField(blank=True, null=True)), + ("end_date", models.DateField(blank=True, null=True)), + ("additional_json_data", models.JSONField(blank=True, default=dict)), ], ), migrations.CreateModel( - name='CourseSessionUser', + name="CourseSessionUser", fields=[ - ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), - ('created_at', models.DateTimeField(auto_now_add=True)), - ('updated_at', models.DateTimeField(auto_now=True)), - ('role', models.CharField(choices=[('MEMBER', 'Teilnehmer'), ('EXPERT', 'Experte/Trainer'), ('TUTOR', 'Lernbegleitung')], default='MEMBER', max_length=255)), - ('course_session', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='course.coursesession')), + ( + "id", + models.UUIDField( + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + ), + ), + ("created_at", models.DateTimeField(auto_now_add=True)), + ("updated_at", models.DateTimeField(auto_now=True)), + ( + "role", + models.CharField( + choices=[ + ("MEMBER", "Teilnehmer"), + ("EXPERT", "Experte/Trainer"), + ("TUTOR", "Lernbegleitung"), + ], + default="MEMBER", + max_length=255, + ), + ), + ( + "course_session", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to="course.coursesession", + ), + ), ], ), ] diff --git a/server/vbv_lernwelt/course/migrations/0002_initial.py b/server/vbv_lernwelt/course/migrations/0002_initial.py index ab3ffe95..25a52a56 100644 --- a/server/vbv_lernwelt/course/migrations/0002_initial.py +++ b/server/vbv_lernwelt/course/migrations/0002_initial.py @@ -1,8 +1,8 @@ # Generated by Django 3.2.13 on 2023-07-14 12:28 +import django.db.models.deletion from django.conf import settings from django.db import migrations, models -import django.db.models.deletion class Migration(migrations.Migration): @@ -11,74 +11,103 @@ class Migration(migrations.Migration): dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('wagtailcore', '0083_workflowcontenttype'), - ('files', '0001_initial'), - ('course', '0001_initial'), - ('learnpath', '0001_initial'), + ("wagtailcore", "0083_workflowcontenttype"), + ("files", "0001_initial"), + ("course", "0001_initial"), + ("learnpath", "0001_initial"), ] operations = [ migrations.AddField( - model_name='coursesessionuser', - name='expert', - field=models.ManyToManyField(blank=True, related_name='expert', to='learnpath.Circle'), + model_name="coursesessionuser", + name="expert", + field=models.ManyToManyField( + blank=True, related_name="expert", to="learnpath.Circle" + ), ), migrations.AddField( - model_name='coursesessionuser', - name='user', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + model_name="coursesessionuser", + name="user", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL + ), ), migrations.AddField( - model_name='coursesession', - name='course', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='course.course'), + model_name="coursesession", + name="course", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to="course.course" + ), ), migrations.AddField( - model_name='coursepage', - name='course', - field=models.OneToOneField(on_delete=django.db.models.deletion.PROTECT, to='course.course'), + model_name="coursepage", + name="course", + field=models.OneToOneField( + on_delete=django.db.models.deletion.PROTECT, to="course.course" + ), ), migrations.AddField( - model_name='coursecompletion', - name='course_session', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='course.coursesession'), + model_name="coursecompletion", + name="course_session", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to="course.coursesession" + ), ), migrations.AddField( - model_name='coursecompletion', - name='page', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='wagtailcore.page'), + model_name="coursecompletion", + name="page", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to="wagtailcore.page" + ), ), migrations.AddField( - model_name='coursecompletion', - name='user', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + model_name="coursecompletion", + name="user", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL + ), ), migrations.AddField( - model_name='coursecategory', - name='course', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='course.course'), + model_name="coursecategory", + name="course", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to="course.course" + ), ), migrations.AddField( - model_name='circledocument', - name='course_session', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='course.coursesession'), + model_name="circledocument", + name="course_session", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to="course.coursesession" + ), ), migrations.AddField( - model_name='circledocument', - name='file', - field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='files.uploadfile'), + model_name="circledocument", + name="file", + field=models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, to="files.uploadfile" + ), ), migrations.AddField( - model_name='circledocument', - name='learning_sequence', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='learnpath.learningsequence'), + model_name="circledocument", + name="learning_sequence", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to="learnpath.learningsequence", + ), ), migrations.AddConstraint( - model_name='coursesessionuser', - constraint=models.UniqueConstraint(fields=('course_session', 'user'), name='course_session_user_unique_course_session_user'), + model_name="coursesessionuser", + constraint=models.UniqueConstraint( + fields=("course_session", "user"), + name="course_session_user_unique_course_session_user", + ), ), migrations.AddConstraint( - model_name='coursecompletion', - constraint=models.UniqueConstraint(fields=('user', 'page', 'course_session'), name='course_completion_unique_user_page_key'), + model_name="coursecompletion", + constraint=models.UniqueConstraint( + fields=("user", "page", "course_session"), + name="course_completion_unique_user_page_key", + ), ), ] diff --git a/server/vbv_lernwelt/course_session/migrations/0001_initial.py b/server/vbv_lernwelt/course_session/migrations/0001_initial.py index 82479436..a669d2d2 100644 --- a/server/vbv_lernwelt/course_session/migrations/0001_initial.py +++ b/server/vbv_lernwelt/course_session/migrations/0001_initial.py @@ -1,8 +1,8 @@ # Generated by Django 3.2.13 on 2023-07-14 12:28 -from django.db import migrations, models import django.db.models.deletion import django_jsonform.models.fields +from django.db import migrations, models class Migration(migrations.Migration): @@ -10,24 +10,49 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('course', '0001_initial'), + ("course", "0001_initial"), ] operations = [ migrations.CreateModel( - name='CourseSessionAssignment', + name="CourseSessionAssignment", fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), ], ), migrations.CreateModel( - name='CourseSessionAttendanceCourse', + name="CourseSessionAttendanceCourse", fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('location', models.CharField(blank=True, default='', max_length=255)), - ('trainer', models.CharField(blank=True, default='', max_length=255)), - ('attendance_user_list', django_jsonform.models.fields.JSONField(default=list)), - ('course_session', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='course.coursesession')), + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("location", models.CharField(blank=True, default="", max_length=255)), + ("trainer", models.CharField(blank=True, default="", max_length=255)), + ( + "attendance_user_list", + django_jsonform.models.fields.JSONField(default=list), + ), + ( + "course_session", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to="course.coursesession", + ), + ), ], ), ] diff --git a/server/vbv_lernwelt/course_session/migrations/0002_coursesessionattendancecourse_due_date.py b/server/vbv_lernwelt/course_session/migrations/0002_coursesessionattendancecourse_due_date.py index ceddc4c8..dfc7cb7d 100644 --- a/server/vbv_lernwelt/course_session/migrations/0002_coursesessionattendancecourse_due_date.py +++ b/server/vbv_lernwelt/course_session/migrations/0002_coursesessionattendancecourse_due_date.py @@ -1,7 +1,7 @@ # Generated by Django 3.2.13 on 2023-07-14 12:28 -from django.db import migrations, models import django.db.models.deletion +from django.db import migrations, models class Migration(migrations.Migration): @@ -9,14 +9,18 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('duedate', '0001_initial'), - ('course_session', '0001_initial'), + ("duedate", "0001_initial"), + ("course_session", "0001_initial"), ] operations = [ migrations.AddField( - model_name='coursesessionattendancecourse', - name='due_date', - field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='attendance_course_due_date', to='duedate.duedate'), + model_name="coursesessionattendancecourse", + name="due_date", + field=models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, + related_name="attendance_course_due_date", + to="duedate.duedate", + ), ), ] diff --git a/server/vbv_lernwelt/course_session/migrations/0003_initial.py b/server/vbv_lernwelt/course_session/migrations/0003_initial.py index 950d20b3..73c4e1ef 100644 --- a/server/vbv_lernwelt/course_session/migrations/0003_initial.py +++ b/server/vbv_lernwelt/course_session/migrations/0003_initial.py @@ -1,7 +1,7 @@ # Generated by Django 3.2.13 on 2023-07-14 12:28 -from django.db import migrations, models import django.db.models.deletion +from django.db import migrations, models class Migration(migrations.Migration): @@ -9,36 +9,54 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('course_session', '0002_coursesessionattendancecourse_due_date'), - ('course', '0001_initial'), - ('duedate', '0001_initial'), - ('learnpath', '0001_initial'), + ("course_session", "0002_coursesessionattendancecourse_due_date"), + ("course", "0001_initial"), + ("duedate", "0001_initial"), + ("learnpath", "0001_initial"), ] operations = [ migrations.AddField( - model_name='coursesessionattendancecourse', - name='learning_content', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='learnpath.learningcontentattendancecourse'), + model_name="coursesessionattendancecourse", + name="learning_content", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to="learnpath.learningcontentattendancecourse", + ), ), migrations.AddField( - model_name='coursesessionassignment', - name='course_session', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='course.coursesession'), + model_name="coursesessionassignment", + name="course_session", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to="course.coursesession" + ), ), migrations.AddField( - model_name='coursesessionassignment', - name='evaluation_deadline', - field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='assignment_evaluation_deadline', to='duedate.duedate'), + model_name="coursesessionassignment", + name="evaluation_deadline", + field=models.OneToOneField( + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="assignment_evaluation_deadline", + to="duedate.duedate", + ), ), migrations.AddField( - model_name='coursesessionassignment', - name='learning_content', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='learnpath.learningcontentassignment'), + model_name="coursesessionassignment", + name="learning_content", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to="learnpath.learningcontentassignment", + ), ), migrations.AddField( - model_name='coursesessionassignment', - name='submission_deadline', - field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='assignment_submission_deadline', to='duedate.duedate'), + model_name="coursesessionassignment", + name="submission_deadline", + field=models.OneToOneField( + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="assignment_submission_deadline", + to="duedate.duedate", + ), ), ] diff --git a/server/vbv_lernwelt/duedate/migrations/0001_initial.py b/server/vbv_lernwelt/duedate/migrations/0001_initial.py index fced76b6..0d84b5f4 100644 --- a/server/vbv_lernwelt/duedate/migrations/0001_initial.py +++ b/server/vbv_lernwelt/duedate/migrations/0001_initial.py @@ -1,7 +1,7 @@ # Generated by Django 3.2.13 on 2023-07-14 12:28 -from django.db import migrations, models import django.db.models.deletion +from django.db import migrations, models class Migration(migrations.Migration): @@ -9,23 +9,52 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('course', '0001_initial'), - ('wagtailcore', '0083_workflowcontenttype'), + ("course", "0001_initial"), + ("wagtailcore", "0083_workflowcontenttype"), ] operations = [ migrations.CreateModel( - name='DueDate', + name="DueDate", fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('start', models.DateTimeField(db_index=True, null=True)), - ('end', models.DateTimeField(blank=True, db_index=True, null=True)), - ('title', models.CharField(default='', max_length=1024)), - ('learning_content_description', models.CharField(blank=True, default='', max_length=1024)), - ('description', models.CharField(blank=True, default='', max_length=1024)), - ('url', models.CharField(blank=True, default='', max_length=1024)), - ('course_session', models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, to='course.coursesession')), - ('page', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='wagtailcore.page')), + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("start", models.DateTimeField(db_index=True, null=True)), + ("end", models.DateTimeField(blank=True, db_index=True, null=True)), + ("title", models.CharField(default="", max_length=1024)), + ( + "learning_content_description", + models.CharField(blank=True, default="", max_length=1024), + ), + ( + "description", + models.CharField(blank=True, default="", max_length=1024), + ), + ("url", models.CharField(blank=True, default="", max_length=1024)), + ( + "course_session", + models.ForeignKey( + blank=True, + on_delete=django.db.models.deletion.CASCADE, + to="course.coursesession", + ), + ), + ( + "page", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + to="wagtailcore.page", + ), + ), ], ), ] diff --git a/server/vbv_lernwelt/feedback/migrations/0001_initial.py b/server/vbv_lernwelt/feedback/migrations/0001_initial.py index 390ba00e..c871fc75 100644 --- a/server/vbv_lernwelt/feedback/migrations/0001_initial.py +++ b/server/vbv_lernwelt/feedback/migrations/0001_initial.py @@ -1,23 +1,31 @@ # Generated by Django 3.2.13 on 2023-07-14 12:28 -from django.db import migrations, models import uuid +from django.db import migrations, models + class Migration(migrations.Migration): initial = True - dependencies = [ - ] + dependencies = [] operations = [ migrations.CreateModel( - name='FeedbackResponse', + name="FeedbackResponse", fields=[ - ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), - ('data', models.JSONField(default=dict)), - ('created_at', models.DateTimeField(auto_now_add=True)), + ( + "id", + models.UUIDField( + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + ), + ), + ("data", models.JSONField(default=dict)), + ("created_at", models.DateTimeField(auto_now_add=True)), ], ), ] diff --git a/server/vbv_lernwelt/feedback/migrations/0002_initial.py b/server/vbv_lernwelt/feedback/migrations/0002_initial.py index 26b01cd2..d0543c85 100644 --- a/server/vbv_lernwelt/feedback/migrations/0002_initial.py +++ b/server/vbv_lernwelt/feedback/migrations/0002_initial.py @@ -1,7 +1,7 @@ # Generated by Django 3.2.13 on 2023-07-14 12:28 -from django.db import migrations, models import django.db.models.deletion +from django.db import migrations, models class Migration(migrations.Migration): @@ -9,20 +9,24 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('feedback', '0001_initial'), - ('course', '0001_initial'), - ('learnpath', '0001_initial'), + ("feedback", "0001_initial"), + ("course", "0001_initial"), + ("learnpath", "0001_initial"), ] operations = [ migrations.AddField( - model_name='feedbackresponse', - name='circle', - field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='learnpath.circle'), + model_name="feedbackresponse", + name="circle", + field=models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, to="learnpath.circle" + ), ), migrations.AddField( - model_name='feedbackresponse', - name='course_session', - field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='course.coursesession'), + model_name="feedbackresponse", + name="course_session", + field=models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, to="course.coursesession" + ), ), ] diff --git a/server/vbv_lernwelt/files/migrations/0001_initial.py b/server/vbv_lernwelt/files/migrations/0001_initial.py index b3d0b982..36cbad5e 100644 --- a/server/vbv_lernwelt/files/migrations/0001_initial.py +++ b/server/vbv_lernwelt/files/migrations/0001_initial.py @@ -1,9 +1,11 @@ # Generated by Django 3.2.13 on 2023-07-14 12:28 +import uuid + +import django.db.models.deletion from django.conf import settings from django.db import migrations, models -import django.db.models.deletion -import uuid + import vbv_lernwelt.files.utils @@ -17,15 +19,37 @@ class Migration(migrations.Migration): operations = [ migrations.CreateModel( - name='UploadFile', + name="UploadFile", fields=[ - ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), - ('file', models.FileField(blank=True, null=True, upload_to=vbv_lernwelt.files.utils.file_generate_upload_path)), - ('original_file_name', models.TextField()), - ('file_name', models.CharField(max_length=255, unique=True)), - ('file_type', models.CharField(max_length=255)), - ('upload_finished_at', models.DateTimeField(blank=True, null=True)), - ('uploaded_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)), + ( + "id", + models.UUIDField( + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + ), + ), + ( + "file", + models.FileField( + blank=True, + null=True, + upload_to=vbv_lernwelt.files.utils.file_generate_upload_path, + ), + ), + ("original_file_name", models.TextField()), + ("file_name", models.CharField(max_length=255, unique=True)), + ("file_type", models.CharField(max_length=255)), + ("upload_finished_at", models.DateTimeField(blank=True, null=True)), + ( + "uploaded_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + to=settings.AUTH_USER_MODEL, + ), + ), ], ), ] diff --git a/server/vbv_lernwelt/learnpath/migrations/0001_initial.py b/server/vbv_lernwelt/learnpath/migrations/0001_initial.py index 737e36ed..596b11ad 100644 --- a/server/vbv_lernwelt/learnpath/migrations/0001_initial.py +++ b/server/vbv_lernwelt/learnpath/migrations/0001_initial.py @@ -1,9 +1,9 @@ # Generated by Django 3.2.13 on 2023-07-14 12:28 -from django.db import migrations, models import django.db.models.deletion import wagtail.blocks import wagtail.fields +from django.db import migrations, models class Migration(migrations.Migration): @@ -11,221 +11,470 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('assignment', '0003_initial'), - ('course', '0001_initial'), - ('wagtailcore', '0083_workflowcontenttype'), + ("assignment", "0003_initial"), + ("course", "0001_initial"), + ("wagtailcore", "0083_workflowcontenttype"), ] operations = [ migrations.CreateModel( - name='Circle', + name="Circle", fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')), - ('description', models.TextField(blank=True, default='')), - ('goals', wagtail.fields.RichTextField()), + ( + "page_ptr", + models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to="wagtailcore.page", + ), + ), + ("description", models.TextField(blank=True, default="")), + ("goals", wagtail.fields.RichTextField()), ], options={ - 'verbose_name': 'Circle', + "verbose_name": "Circle", }, - bases=('wagtailcore.page',), + bases=("wagtailcore.page",), ), migrations.CreateModel( - name='LearningContentAttendanceCourse', + name="LearningContentAttendanceCourse", fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')), - ('minutes', models.PositiveIntegerField(default=15)), - ('description', wagtail.fields.RichTextField(blank=True)), - ('content_url', models.TextField(blank=True)), - ('has_course_completion_status', models.BooleanField(default=True)), - ('can_user_self_toggle_course_completion', models.BooleanField(default=False)), + ( + "page_ptr", + models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to="wagtailcore.page", + ), + ), + ("minutes", models.PositiveIntegerField(default=15)), + ("description", wagtail.fields.RichTextField(blank=True)), + ("content_url", models.TextField(blank=True)), + ("has_course_completion_status", models.BooleanField(default=True)), + ( + "can_user_self_toggle_course_completion", + models.BooleanField(default=False), + ), ], options={ - 'abstract': False, + "abstract": False, }, - bases=('wagtailcore.page',), + bases=("wagtailcore.page",), ), migrations.CreateModel( - name='LearningContentDocumentList', + name="LearningContentDocumentList", fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')), - ('minutes', models.PositiveIntegerField(default=15)), - ('description', wagtail.fields.RichTextField(blank=True)), - ('content_url', models.TextField(blank=True)), - ('has_course_completion_status', models.BooleanField(default=True)), - ('can_user_self_toggle_course_completion', models.BooleanField(default=True)), - ('documents', wagtail.fields.StreamField([('document', wagtail.blocks.StructBlock([('title', wagtail.blocks.TextBlock()), ('description', wagtail.blocks.TextBlock(default='', required=False)), ('icon_url', wagtail.blocks.TextBlock(default='', required=False)), ('link_display_text', wagtail.blocks.CharBlock(default='Link öffnen', max_length=255)), ('url', wagtail.blocks.TextBlock(default='', required=False)), ('open_window', wagtail.blocks.BooleanBlock(default=False))]))], blank=True, use_json_field=True)), + ( + "page_ptr", + models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to="wagtailcore.page", + ), + ), + ("minutes", models.PositiveIntegerField(default=15)), + ("description", wagtail.fields.RichTextField(blank=True)), + ("content_url", models.TextField(blank=True)), + ("has_course_completion_status", models.BooleanField(default=True)), + ( + "can_user_self_toggle_course_completion", + models.BooleanField(default=True), + ), + ( + "documents", + wagtail.fields.StreamField( + [ + ( + "document", + wagtail.blocks.StructBlock( + [ + ("title", wagtail.blocks.TextBlock()), + ( + "description", + wagtail.blocks.TextBlock( + default="", required=False + ), + ), + ( + "icon_url", + wagtail.blocks.TextBlock( + default="", required=False + ), + ), + ( + "link_display_text", + wagtail.blocks.CharBlock( + default="Link öffnen", max_length=255 + ), + ), + ( + "url", + wagtail.blocks.TextBlock( + default="", required=False + ), + ), + ( + "open_window", + wagtail.blocks.BooleanBlock(default=False), + ), + ] + ), + ) + ], + blank=True, + use_json_field=True, + ), + ), ], options={ - 'abstract': False, + "abstract": False, }, - bases=('wagtailcore.page',), + bases=("wagtailcore.page",), ), migrations.CreateModel( - name='LearningContentFeedback', + name="LearningContentFeedback", fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')), - ('minutes', models.PositiveIntegerField(default=15)), - ('description', wagtail.fields.RichTextField(blank=True)), - ('content_url', models.TextField(blank=True)), - ('has_course_completion_status', models.BooleanField(default=True)), - ('can_user_self_toggle_course_completion', models.BooleanField(default=True)), + ( + "page_ptr", + models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to="wagtailcore.page", + ), + ), + ("minutes", models.PositiveIntegerField(default=15)), + ("description", wagtail.fields.RichTextField(blank=True)), + ("content_url", models.TextField(blank=True)), + ("has_course_completion_status", models.BooleanField(default=True)), + ( + "can_user_self_toggle_course_completion", + models.BooleanField(default=True), + ), ], options={ - 'abstract': False, + "abstract": False, }, - bases=('wagtailcore.page',), + bases=("wagtailcore.page",), ), migrations.CreateModel( - name='LearningContentLearningModule', + name="LearningContentLearningModule", fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')), - ('minutes', models.PositiveIntegerField(default=15)), - ('description', wagtail.fields.RichTextField(blank=True)), - ('content_url', models.TextField(blank=True)), - ('has_course_completion_status', models.BooleanField(default=True)), - ('can_user_self_toggle_course_completion', models.BooleanField(default=True)), + ( + "page_ptr", + models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to="wagtailcore.page", + ), + ), + ("minutes", models.PositiveIntegerField(default=15)), + ("description", wagtail.fields.RichTextField(blank=True)), + ("content_url", models.TextField(blank=True)), + ("has_course_completion_status", models.BooleanField(default=True)), + ( + "can_user_self_toggle_course_completion", + models.BooleanField(default=True), + ), ], options={ - 'abstract': False, + "abstract": False, }, - bases=('wagtailcore.page',), + bases=("wagtailcore.page",), ), migrations.CreateModel( - name='LearningContentMediaLibrary', + name="LearningContentMediaLibrary", fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')), - ('minutes', models.PositiveIntegerField(default=15)), - ('description', wagtail.fields.RichTextField(blank=True)), - ('content_url', models.TextField(blank=True)), - ('has_course_completion_status', models.BooleanField(default=True)), - ('can_user_self_toggle_course_completion', models.BooleanField(default=True)), + ( + "page_ptr", + models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to="wagtailcore.page", + ), + ), + ("minutes", models.PositiveIntegerField(default=15)), + ("description", wagtail.fields.RichTextField(blank=True)), + ("content_url", models.TextField(blank=True)), + ("has_course_completion_status", models.BooleanField(default=True)), + ( + "can_user_self_toggle_course_completion", + models.BooleanField(default=True), + ), ], options={ - 'abstract': False, + "abstract": False, }, - bases=('wagtailcore.page',), + bases=("wagtailcore.page",), ), migrations.CreateModel( - name='LearningContentPlaceholder', + name="LearningContentPlaceholder", fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')), - ('minutes', models.PositiveIntegerField(default=15)), - ('description', wagtail.fields.RichTextField(blank=True)), - ('content_url', models.TextField(blank=True)), - ('has_course_completion_status', models.BooleanField(default=True)), - ('can_user_self_toggle_course_completion', models.BooleanField(default=True)), + ( + "page_ptr", + models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to="wagtailcore.page", + ), + ), + ("minutes", models.PositiveIntegerField(default=15)), + ("description", wagtail.fields.RichTextField(blank=True)), + ("content_url", models.TextField(blank=True)), + ("has_course_completion_status", models.BooleanField(default=True)), + ( + "can_user_self_toggle_course_completion", + models.BooleanField(default=True), + ), ], options={ - 'abstract': False, + "abstract": False, }, - bases=('wagtailcore.page',), + bases=("wagtailcore.page",), ), migrations.CreateModel( - name='LearningContentRichText', + name="LearningContentRichText", fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')), - ('minutes', models.PositiveIntegerField(default=15)), - ('description', wagtail.fields.RichTextField(blank=True)), - ('content_url', models.TextField(blank=True)), - ('has_course_completion_status', models.BooleanField(default=True)), - ('text', wagtail.fields.RichTextField(blank=True)), - ('can_user_self_toggle_course_completion', models.BooleanField(default=True)), + ( + "page_ptr", + models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to="wagtailcore.page", + ), + ), + ("minutes", models.PositiveIntegerField(default=15)), + ("description", wagtail.fields.RichTextField(blank=True)), + ("content_url", models.TextField(blank=True)), + ("has_course_completion_status", models.BooleanField(default=True)), + ("text", wagtail.fields.RichTextField(blank=True)), + ( + "can_user_self_toggle_course_completion", + models.BooleanField(default=True), + ), ], options={ - 'abstract': False, + "abstract": False, }, - bases=('wagtailcore.page',), + bases=("wagtailcore.page",), ), migrations.CreateModel( - name='LearningContentTest', + name="LearningContentTest", fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')), - ('minutes', models.PositiveIntegerField(default=15)), - ('description', wagtail.fields.RichTextField(blank=True)), - ('content_url', models.TextField(blank=True)), - ('has_course_completion_status', models.BooleanField(default=True)), - ('can_user_self_toggle_course_completion', models.BooleanField(default=False)), - ('checkbox_text', models.TextField(blank=True)), + ( + "page_ptr", + models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to="wagtailcore.page", + ), + ), + ("minutes", models.PositiveIntegerField(default=15)), + ("description", wagtail.fields.RichTextField(blank=True)), + ("content_url", models.TextField(blank=True)), + ("has_course_completion_status", models.BooleanField(default=True)), + ( + "can_user_self_toggle_course_completion", + models.BooleanField(default=False), + ), + ("checkbox_text", models.TextField(blank=True)), ], options={ - 'abstract': False, + "abstract": False, }, - bases=('wagtailcore.page',), + bases=("wagtailcore.page",), ), migrations.CreateModel( - name='LearningContentVideo', + name="LearningContentVideo", fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')), - ('minutes', models.PositiveIntegerField(default=15)), - ('description', wagtail.fields.RichTextField(blank=True)), - ('content_url', models.TextField(blank=True)), - ('has_course_completion_status', models.BooleanField(default=True)), - ('can_user_self_toggle_course_completion', models.BooleanField(default=True)), + ( + "page_ptr", + models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to="wagtailcore.page", + ), + ), + ("minutes", models.PositiveIntegerField(default=15)), + ("description", wagtail.fields.RichTextField(blank=True)), + ("content_url", models.TextField(blank=True)), + ("has_course_completion_status", models.BooleanField(default=True)), + ( + "can_user_self_toggle_course_completion", + models.BooleanField(default=True), + ), ], options={ - 'abstract': False, + "abstract": False, }, - bases=('wagtailcore.page',), + bases=("wagtailcore.page",), ), migrations.CreateModel( - name='LearningPath', + name="LearningPath", fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')), + ( + "page_ptr", + models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to="wagtailcore.page", + ), + ), ], options={ - 'verbose_name': 'Learning Path', + "verbose_name": "Learning Path", }, - bases=('wagtailcore.page',), + bases=("wagtailcore.page",), ), migrations.CreateModel( - name='LearningSequence', + name="LearningSequence", fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')), - ('icon', models.CharField(default='it-icon-ls-start', max_length=255)), + ( + "page_ptr", + models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to="wagtailcore.page", + ), + ), + ("icon", models.CharField(default="it-icon-ls-start", max_length=255)), ], options={ - 'verbose_name': 'Learning Sequence', + "verbose_name": "Learning Sequence", }, - bases=('wagtailcore.page',), + bases=("wagtailcore.page",), ), migrations.CreateModel( - name='Topic', + name="Topic", fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')), - ('is_visible', models.BooleanField(default=True)), + ( + "page_ptr", + models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to="wagtailcore.page", + ), + ), + ("is_visible", models.BooleanField(default=True)), ], options={ - 'verbose_name': 'Topic', + "verbose_name": "Topic", }, - bases=('wagtailcore.page',), + bases=("wagtailcore.page",), ), migrations.CreateModel( - name='LearningUnit', + name="LearningUnit", fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')), - ('title_hidden', models.BooleanField(default=False)), - ('course_category', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='course.coursecategory')), + ( + "page_ptr", + models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to="wagtailcore.page", + ), + ), + ("title_hidden", models.BooleanField(default=False)), + ( + "course_category", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + to="course.coursecategory", + ), + ), ], options={ - 'verbose_name': 'Learning Unit', + "verbose_name": "Learning Unit", }, - bases=('wagtailcore.page',), + bases=("wagtailcore.page",), ), migrations.CreateModel( - name='LearningContentAssignment', + name="LearningContentAssignment", fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')), - ('minutes', models.PositiveIntegerField(default=15)), - ('description', wagtail.fields.RichTextField(blank=True)), - ('content_url', models.TextField(blank=True)), - ('has_course_completion_status', models.BooleanField(default=True)), - ('can_user_self_toggle_course_completion', models.BooleanField(default=False)), - ('assignment_type', models.CharField(choices=[('CASEWORK', 'CASEWORK'), ('PREP_ASSIGNMENT', 'PREP_ASSIGNMENT'), ('REFLECTION', 'REFLECTION')], default='CASEWORK', max_length=50)), - ('content_assignment', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='assignment.assignment')), + ( + "page_ptr", + models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to="wagtailcore.page", + ), + ), + ("minutes", models.PositiveIntegerField(default=15)), + ("description", wagtail.fields.RichTextField(blank=True)), + ("content_url", models.TextField(blank=True)), + ("has_course_completion_status", models.BooleanField(default=True)), + ( + "can_user_self_toggle_course_completion", + models.BooleanField(default=False), + ), + ( + "assignment_type", + models.CharField( + choices=[ + ("CASEWORK", "CASEWORK"), + ("PREP_ASSIGNMENT", "PREP_ASSIGNMENT"), + ("REFLECTION", "REFLECTION"), + ], + default="CASEWORK", + max_length=50, + ), + ), + ( + "content_assignment", + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + to="assignment.assignment", + ), + ), ], options={ - 'abstract': False, + "abstract": False, }, - bases=('wagtailcore.page',), + bases=("wagtailcore.page",), ), ] diff --git a/server/vbv_lernwelt/media_library/migrations/0001_initial.py b/server/vbv_lernwelt/media_library/migrations/0001_initial.py index 05091256..9b84fef1 100644 --- a/server/vbv_lernwelt/media_library/migrations/0001_initial.py +++ b/server/vbv_lernwelt/media_library/migrations/0001_initial.py @@ -1,13 +1,13 @@ # Generated by Django 3.2.13 on 2023-07-14 12:28 -from django.conf import settings -from django.db import migrations, models import django.db.models.deletion import taggit.managers import wagtail.blocks import wagtail.fields import wagtail.models.collections import wagtail.search.index +from django.conf import settings +from django.db import migrations, models class Migration(migrations.Migration): @@ -15,62 +15,357 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('course', '0002_initial'), + ("course", "0002_initial"), migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('taggit', '0004_alter_taggeditem_content_type_alter_taggeditem_tag'), - ('wagtailcore', '0083_workflowcontenttype'), + ("taggit", "0004_alter_taggeditem_content_type_alter_taggeditem_tag"), + ("wagtailcore", "0083_workflowcontenttype"), ] operations = [ migrations.CreateModel( - name='MediaLibraryPage', + name="MediaLibraryPage", fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')), + ( + "page_ptr", + models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to="wagtailcore.page", + ), + ), ], options={ - 'abstract': False, + "abstract": False, }, - bases=('wagtailcore.page',), + bases=("wagtailcore.page",), ), migrations.CreateModel( - name='MediaCategoryPage', + name="MediaCategoryPage", fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')), - ('introduction_text', models.TextField(default='')), - ('description_title', models.TextField(default='Das erwartet dich in diesem Handlungsfeld')), - ('description_text', models.TextField(default='')), - ('items', wagtail.fields.StreamField([('item', wagtail.blocks.TextBlock())], use_json_field=True)), - ('overview_icon', models.CharField(default='icon-hf-fahrzeug', max_length=255)), - ('detail_image', models.CharField(default='image-hf-fahrzeug', max_length=255)), - ('body', wagtail.fields.StreamField([('content_collection', wagtail.blocks.StructBlock([('title', wagtail.blocks.TextBlock()), ('description', wagtail.blocks.TextBlock(default='', required=False)), ('contents', wagtail.blocks.StreamBlock([('learn_media', wagtail.blocks.StructBlock([('title', wagtail.blocks.TextBlock()), ('description', wagtail.blocks.TextBlock(default='', required=False)), ('icon_url', wagtail.blocks.TextBlock(default='', required=False)), ('link_display_text', wagtail.blocks.CharBlock(default='Link öffnen', max_length=255)), ('url', wagtail.blocks.TextBlock(default='', required=False)), ('open_window', wagtail.blocks.BooleanBlock(default=False))])), ('external_link', wagtail.blocks.StructBlock([('title', wagtail.blocks.TextBlock()), ('description', wagtail.blocks.TextBlock(default='', required=False)), ('icon_url', wagtail.blocks.TextBlock(default='', required=False)), ('link_display_text', wagtail.blocks.CharBlock(default='Link öffnen', max_length=255)), ('url', wagtail.blocks.TextBlock(default='', required=False)), ('open_window', wagtail.blocks.BooleanBlock(default=False))])), ('internal_link', wagtail.blocks.StructBlock([('title', wagtail.blocks.TextBlock()), ('description', wagtail.blocks.TextBlock(default='', required=False)), ('icon_url', wagtail.blocks.TextBlock(default='', required=False)), ('link_display_text', wagtail.blocks.CharBlock(default='Link öffnen', max_length=255)), ('url', wagtail.blocks.TextBlock(default='', required=False)), ('open_window', wagtail.blocks.BooleanBlock(default=False))])), ('relative_link', wagtail.blocks.StructBlock([('title', wagtail.blocks.TextBlock()), ('description', wagtail.blocks.TextBlock(default='', required=False)), ('icon_url', wagtail.blocks.TextBlock(default='', required=False)), ('link_display_text', wagtail.blocks.CharBlock(default='Link öffnen', max_length=255)), ('url', wagtail.blocks.TextBlock(default='', required=False)), ('open_window', wagtail.blocks.BooleanBlock(default=False))]))]))]))], null=True, use_json_field=True)), - ('course_category', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='course.coursecategory')), + ( + "page_ptr", + models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to="wagtailcore.page", + ), + ), + ("introduction_text", models.TextField(default="")), + ( + "description_title", + models.TextField( + default="Das erwartet dich in diesem Handlungsfeld" + ), + ), + ("description_text", models.TextField(default="")), + ( + "items", + wagtail.fields.StreamField( + [("item", wagtail.blocks.TextBlock())], use_json_field=True + ), + ), + ( + "overview_icon", + models.CharField(default="icon-hf-fahrzeug", max_length=255), + ), + ( + "detail_image", + models.CharField(default="image-hf-fahrzeug", max_length=255), + ), + ( + "body", + wagtail.fields.StreamField( + [ + ( + "content_collection", + wagtail.blocks.StructBlock( + [ + ("title", wagtail.blocks.TextBlock()), + ( + "description", + wagtail.blocks.TextBlock( + default="", required=False + ), + ), + ( + "contents", + wagtail.blocks.StreamBlock( + [ + ( + "learn_media", + wagtail.blocks.StructBlock( + [ + ( + "title", + wagtail.blocks.TextBlock(), + ), + ( + "description", + wagtail.blocks.TextBlock( + default="", + required=False, + ), + ), + ( + "icon_url", + wagtail.blocks.TextBlock( + default="", + required=False, + ), + ), + ( + "link_display_text", + wagtail.blocks.CharBlock( + default="Link öffnen", + max_length=255, + ), + ), + ( + "url", + wagtail.blocks.TextBlock( + default="", + required=False, + ), + ), + ( + "open_window", + wagtail.blocks.BooleanBlock( + default=False + ), + ), + ] + ), + ), + ( + "external_link", + wagtail.blocks.StructBlock( + [ + ( + "title", + wagtail.blocks.TextBlock(), + ), + ( + "description", + wagtail.blocks.TextBlock( + default="", + required=False, + ), + ), + ( + "icon_url", + wagtail.blocks.TextBlock( + default="", + required=False, + ), + ), + ( + "link_display_text", + wagtail.blocks.CharBlock( + default="Link öffnen", + max_length=255, + ), + ), + ( + "url", + wagtail.blocks.TextBlock( + default="", + required=False, + ), + ), + ( + "open_window", + wagtail.blocks.BooleanBlock( + default=False + ), + ), + ] + ), + ), + ( + "internal_link", + wagtail.blocks.StructBlock( + [ + ( + "title", + wagtail.blocks.TextBlock(), + ), + ( + "description", + wagtail.blocks.TextBlock( + default="", + required=False, + ), + ), + ( + "icon_url", + wagtail.blocks.TextBlock( + default="", + required=False, + ), + ), + ( + "link_display_text", + wagtail.blocks.CharBlock( + default="Link öffnen", + max_length=255, + ), + ), + ( + "url", + wagtail.blocks.TextBlock( + default="", + required=False, + ), + ), + ( + "open_window", + wagtail.blocks.BooleanBlock( + default=False + ), + ), + ] + ), + ), + ( + "relative_link", + wagtail.blocks.StructBlock( + [ + ( + "title", + wagtail.blocks.TextBlock(), + ), + ( + "description", + wagtail.blocks.TextBlock( + default="", + required=False, + ), + ), + ( + "icon_url", + wagtail.blocks.TextBlock( + default="", + required=False, + ), + ), + ( + "link_display_text", + wagtail.blocks.CharBlock( + default="Link öffnen", + max_length=255, + ), + ), + ( + "url", + wagtail.blocks.TextBlock( + default="", + required=False, + ), + ), + ( + "open_window", + wagtail.blocks.BooleanBlock( + default=False + ), + ), + ] + ), + ), + ] + ), + ), + ] + ), + ) + ], + null=True, + use_json_field=True, + ), + ), + ( + "course_category", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + to="course.coursecategory", + ), + ), ], options={ - 'abstract': False, + "abstract": False, }, - bases=('wagtailcore.page',), + bases=("wagtailcore.page",), ), migrations.CreateModel( - name='LibraryDocument', + name="LibraryDocument", fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=255, verbose_name='title')), - ('file', models.FileField(upload_to='documents', verbose_name='file')), - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='created at')), - ('file_size', models.PositiveIntegerField(editable=False, null=True)), - ('file_hash', models.CharField(blank=True, editable=False, max_length=40)), - ('display_text', models.CharField(default='', max_length=1024)), - ('description', models.TextField(default='')), - ('link_display_text', models.CharField(default='', max_length=1024)), - ('thumbnail', models.URLField()), - ('collection', models.ForeignKey(default=wagtail.models.collections.get_root_collection_id, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='wagtailcore.collection', verbose_name='collection')), - ('tags', taggit.managers.TaggableManager(blank=True, help_text=None, through='taggit.TaggedItem', to='taggit.Tag', verbose_name='tags')), - ('uploaded_by_user', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='uploaded by user')), + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("title", models.CharField(max_length=255, verbose_name="title")), + ("file", models.FileField(upload_to="documents", verbose_name="file")), + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="created at"), + ), + ("file_size", models.PositiveIntegerField(editable=False, null=True)), + ( + "file_hash", + models.CharField(blank=True, editable=False, max_length=40), + ), + ("display_text", models.CharField(default="", max_length=1024)), + ("description", models.TextField(default="")), + ("link_display_text", models.CharField(default="", max_length=1024)), + ("thumbnail", models.URLField()), + ( + "collection", + models.ForeignKey( + default=wagtail.models.collections.get_root_collection_id, + on_delete=django.db.models.deletion.CASCADE, + related_name="+", + to="wagtailcore.collection", + verbose_name="collection", + ), + ), + ( + "tags", + taggit.managers.TaggableManager( + blank=True, + help_text=None, + through="taggit.TaggedItem", + to="taggit.Tag", + verbose_name="tags", + ), + ), + ( + "uploaded_by_user", + models.ForeignKey( + blank=True, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + to=settings.AUTH_USER_MODEL, + verbose_name="uploaded by user", + ), + ), ], options={ - 'verbose_name': 'document', - 'verbose_name_plural': 'documents', - 'abstract': False, + "verbose_name": "document", + "verbose_name_plural": "documents", + "abstract": False, }, bases=(wagtail.search.index.Indexed, models.Model), ), diff --git a/server/vbv_lernwelt/notify/migrations/0001_initial.py b/server/vbv_lernwelt/notify/migrations/0001_initial.py index 215843c5..cbca2aeb 100644 --- a/server/vbv_lernwelt/notify/migrations/0001_initial.py +++ b/server/vbv_lernwelt/notify/migrations/0001_initial.py @@ -1,10 +1,10 @@ # Generated by Django 3.2.13 on 2023-07-14 13:08 -from django.conf import settings -from django.db import migrations, models import django.db.models.deletion import django.utils.timezone import jsonfield.fields +from django.conf import settings +from django.db import migrations, models class Migration(migrations.Migration): @@ -13,41 +13,163 @@ class Migration(migrations.Migration): dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('contenttypes', '0002_remove_content_type_name'), + ("contenttypes", "0002_remove_content_type_name"), ] operations = [ migrations.CreateModel( - name='Notification', + name="Notification", fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('level', models.CharField(choices=[('success', 'success'), ('info', 'info'), ('warning', 'warning'), ('error', 'error')], default='info', max_length=20, verbose_name='level')), - ('unread', models.BooleanField(db_index=True, default=True, verbose_name='unread')), - ('actor_object_id', models.CharField(max_length=255, verbose_name='actor object id')), - ('verb', models.CharField(max_length=255, verbose_name='verb')), - ('description', models.TextField(blank=True, null=True, verbose_name='description')), - ('target_object_id', models.CharField(blank=True, max_length=255, null=True, verbose_name='target object id')), - ('action_object_object_id', models.CharField(blank=True, max_length=255, null=True, verbose_name='action object object id')), - ('timestamp', models.DateTimeField(db_index=True, default=django.utils.timezone.now, verbose_name='timestamp')), - ('public', models.BooleanField(db_index=True, default=True, verbose_name='public')), - ('deleted', models.BooleanField(db_index=True, default=False, verbose_name='deleted')), - ('emailed', models.BooleanField(db_index=True, default=False, verbose_name='emailed')), - ('data', jsonfield.fields.JSONField(blank=True, null=True, verbose_name='data')), - ('notification_type', models.CharField(choices=[('USER_INTERACTION', 'User Interaction'), ('PROGRESS', 'Progress'), ('INFORMATION', 'Information')], default='INFORMATION', max_length=32)), - ('target_url', models.URLField(blank=True, null=True)), - ('actor_avatar_url', models.URLField(blank=True, null=True)), - ('course', models.CharField(blank=True, max_length=32, null=True)), - ('action_object_content_type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='notify_action_object', to='contenttypes.contenttype', verbose_name='action object content type')), - ('actor_content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='notify_actor', to='contenttypes.contenttype', verbose_name='actor content type')), - ('recipient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='notifications', to=settings.AUTH_USER_MODEL, verbose_name='recipient')), - ('target_content_type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='notify_target', to='contenttypes.contenttype', verbose_name='target content type')), + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "level", + models.CharField( + choices=[ + ("success", "success"), + ("info", "info"), + ("warning", "warning"), + ("error", "error"), + ], + default="info", + max_length=20, + verbose_name="level", + ), + ), + ( + "unread", + models.BooleanField( + db_index=True, default=True, verbose_name="unread" + ), + ), + ( + "actor_object_id", + models.CharField(max_length=255, verbose_name="actor object id"), + ), + ("verb", models.CharField(max_length=255, verbose_name="verb")), + ( + "description", + models.TextField(blank=True, null=True, verbose_name="description"), + ), + ( + "target_object_id", + models.CharField( + blank=True, + max_length=255, + null=True, + verbose_name="target object id", + ), + ), + ( + "action_object_object_id", + models.CharField( + blank=True, + max_length=255, + null=True, + verbose_name="action object object id", + ), + ), + ( + "timestamp", + models.DateTimeField( + db_index=True, + default=django.utils.timezone.now, + verbose_name="timestamp", + ), + ), + ( + "public", + models.BooleanField( + db_index=True, default=True, verbose_name="public" + ), + ), + ( + "deleted", + models.BooleanField( + db_index=True, default=False, verbose_name="deleted" + ), + ), + ( + "emailed", + models.BooleanField( + db_index=True, default=False, verbose_name="emailed" + ), + ), + ( + "data", + jsonfield.fields.JSONField( + blank=True, null=True, verbose_name="data" + ), + ), + ( + "notification_type", + models.CharField( + choices=[ + ("USER_INTERACTION", "User Interaction"), + ("PROGRESS", "Progress"), + ("INFORMATION", "Information"), + ], + default="INFORMATION", + max_length=32, + ), + ), + ("target_url", models.URLField(blank=True, null=True)), + ("actor_avatar_url", models.URLField(blank=True, null=True)), + ("course", models.CharField(blank=True, max_length=32, null=True)), + ( + "action_object_content_type", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="notify_action_object", + to="contenttypes.contenttype", + verbose_name="action object content type", + ), + ), + ( + "actor_content_type", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="notify_actor", + to="contenttypes.contenttype", + verbose_name="actor content type", + ), + ), + ( + "recipient", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="notifications", + to=settings.AUTH_USER_MODEL, + verbose_name="recipient", + ), + ), + ( + "target_content_type", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="notify_target", + to="contenttypes.contenttype", + verbose_name="target content type", + ), + ), ], options={ - 'verbose_name': 'Notification', - 'verbose_name_plural': 'Notifications', - 'ordering': ['-timestamp'], - 'abstract': False, - 'index_together': {('recipient', 'unread')}, + "verbose_name": "Notification", + "verbose_name_plural": "Notifications", + "ordering": ["-timestamp"], + "abstract": False, + "index_together": {("recipient", "unread")}, }, ), ]