aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Joe Banks <[email protected]>2024-05-19 20:55:35 +0100
committerGravatar Joe Banks <[email protected]>2024-05-26 03:57:50 +0100
commita2b6597b497f974e8520a12b1f5c9a6858066dcd (patch)
treeea67f548a47271a019db6a86086ecffbb3690bbf
parentBump sentry-sdk from 2.2.1 to 2.3.1 (#1327) (diff)
Add UserModSettings model
Update imports in API models to include UserModSettings Add migration for UserModSettings model
-rw-r--r--pydis_site/apps/api/migrations/0097_user_mod_settings.py29
-rw-r--r--pydis_site/apps/api/models/__init__.py3
-rw-r--r--pydis_site/apps/api/models/bot/__init__.py2
-rw-r--r--pydis_site/apps/api/models/bot/user.py38
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"
+ )
+ ]