diff options
-rw-r--r-- | pydis_site/apps/api/migrations/0097_user_mod_settings.py | 29 | ||||
-rw-r--r-- | pydis_site/apps/api/models/__init__.py | 3 | ||||
-rw-r--r-- | pydis_site/apps/api/models/bot/__init__.py | 2 | ||||
-rw-r--r-- | pydis_site/apps/api/models/bot/user.py | 38 |
4 files changed, 69 insertions, 3 deletions
diff --git a/pydis_site/apps/api/migrations/0097_user_mod_settings.py b/pydis_site/apps/api/migrations/0097_user_mod_settings.py new file mode 100644 index 00000000..35065fe3 --- /dev/null +++ b/pydis_site/apps/api/migrations/0097_user_mod_settings.py @@ -0,0 +1,29 @@ +# Generated by Django 5.0.6 on 2024-05-19 19:15 + +import django.db.models.deletion +import pydis_site.apps.api.models.mixins +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0096_merge_0093_user_alts_0095_user_display_name'), + ] + + operations = [ + migrations.CreateModel( + name='UserModSettings', + fields=[ + ('moderator', models.OneToOneField(help_text='The moderator for whom these settings belong to', on_delete=django.db.models.deletion.CASCADE, primary_key=True, related_name='mod_settings', serialize=False, to='api.user')), + ('pings_disabled_until', models.DateTimeField(help_text='Date and time that moderation pings are disabled until', null=True)), + ('pings_schedule_start', models.TimeField(help_text='UTC time that the moderator wishes to receive pings from', null=True)), + ('pings_schedule_end', models.DurationField(help_text='Duration after the schedule start time the moderator wishes to receive pings', null=True)), + ], + bases=(pydis_site.apps.api.models.mixins.ModelReprMixin, models.Model), + ), + migrations.AddConstraint( + model_name='usermodsettings', + constraint=models.CheckConstraint(check=models.Q(models.Q(('pings_schedule_end__isnull', True), ('pings_schedule_start__isnull', True)), models.Q(('pings_schedule_end__isnull', False), ('pings_schedule_start__isnull', False)), _connector='OR'), name='complete_pings_schedule'), + ), + ] diff --git a/pydis_site/apps/api/models/__init__.py b/pydis_site/apps/api/models/__init__.py index 7ac463b1..7bc6a7ed 100644 --- a/pydis_site/apps/api/models/__init__.py +++ b/pydis_site/apps/api/models/__init__.py @@ -20,5 +20,6 @@ from .bot import ( Reminder, Role, User, - UserAltRelationship + UserAltRelationship, + UserModSettings ) diff --git a/pydis_site/apps/api/models/bot/__init__.py b/pydis_site/apps/api/models/bot/__init__.py index a17c70ff..396559bf 100644 --- a/pydis_site/apps/api/models/bot/__init__.py +++ b/pydis_site/apps/api/models/bot/__init__.py @@ -16,4 +16,4 @@ from .off_topic_channel_name import OffTopicChannelName from .offensive_message import OffensiveMessage from .reminder import Reminder from .role import Role -from .user import User, UserAltRelationship +from .user import User, UserAltRelationship, UserModSettings diff --git a/pydis_site/apps/api/models/bot/user.py b/pydis_site/apps/api/models/bot/user.py index 4d317b8e..0d6b2eb1 100644 --- a/pydis_site/apps/api/models/bot/user.py +++ b/pydis_site/apps/api/models/bot/user.py @@ -99,7 +99,6 @@ class User(ModelReprMixin, models.Model): """ return str(self) - class UserAltRelationship(ModelReprMixin, ModelTimestampMixin, models.Model): """A relationship between a Discord user and its alts.""" @@ -140,3 +139,40 @@ class UserAltRelationship(ModelReprMixin, ModelTimestampMixin, models.Model): check=~models.Q(source=models.F("target")), ), ] + +class UserModSettings(ModelReprMixin, models.Model): + """Moderation settings for a Moderator member of staff.""" + + moderator = models.OneToOneField( + User, + primary_key=True, + on_delete=models.CASCADE, + related_name="mod_settings", + help_text="The moderator for whom these settings belong to" + ) + + pings_disabled_until = models.DateTimeField( + null=True, + help_text="Date and time that moderation pings are disabled until" + ) + + pings_schedule_start = models.TimeField( + null=True, + help_text="UTC time that the moderator wishes to receive pings from" + ) + + pings_schedule_end = models.DurationField( + null=True, + help_text="Duration after the schedule start time the moderator wishes to receive pings" + ) + + class Meta: + """Meta options on the moderator preferences.""" + + constraints = [ + models.CheckConstraint( + check=models.Q(pings_schedule_start__isnull=True, pings_schedule_end__isnull=True) + | models.Q(pings_schedule_start__isnull=False, pings_schedule_end__isnull=False), + name="complete_pings_schedule" + ) + ] |