aboutsummaryrefslogtreecommitdiffstats
path: root/pydis_site/apps/api/migrations
diff options
context:
space:
mode:
authorGravatar Johannes Christ <[email protected]>2023-12-13 09:07:08 +0100
committerGravatar Johannes Christ <[email protected]>2023-12-17 14:34:07 +0100
commita908b9aa3a18222f296c0e4bd67d815f48ada5af (patch)
treef89afe69e35694ca740f5921627ff91a76f272d3 /pydis_site/apps/api/migrations
parentMerge pull request #1175 from python-discord/dependabot/pip/ruff-0.1.8 (diff)
Migrate mailing lists to their own API endpoints
Add a new model for the bot to store its mailing list state in, as opposed to the current JSON blob in the BotSetting table. Migrate the existing settings from the BotSetting table into the new model.
Diffstat (limited to 'pydis_site/apps/api/migrations')
-rw-r--r--pydis_site/apps/api/migrations/0093_add_mailing_lists.py36
-rw-r--r--pydis_site/apps/api/migrations/0094_migrate_mailing_listdata.py41
2 files changed, 77 insertions, 0 deletions
diff --git a/pydis_site/apps/api/migrations/0093_add_mailing_lists.py b/pydis_site/apps/api/migrations/0093_add_mailing_lists.py
new file mode 100644
index 00000000..9f210b94
--- /dev/null
+++ b/pydis_site/apps/api/migrations/0093_add_mailing_lists.py
@@ -0,0 +1,36 @@
+# Generated by Django 5.0 on 2023-12-17 13:31
+
+import django.db.models.deletion
+import pydis_site.apps.api.models.mixins
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('api', '0092_remove_redirect_filter_list'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='MailingList',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('name', models.CharField(help_text='A short identifier for the mailing list.', max_length=50, unique=True)),
+ ],
+ bases=(pydis_site.apps.api.models.mixins.ModelReprMixin, models.Model),
+ ),
+ migrations.CreateModel(
+ name='MailingListSeenItem',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('hash', models.CharField(help_text='A hash, or similar identifier, of the content that was seen.', max_length=100)),
+ ('list', models.ForeignKey(help_text='The mailing list from which this seen item originates.', on_delete=django.db.models.deletion.CASCADE, related_name='seen_items', to='api.mailinglist')),
+ ],
+ bases=(pydis_site.apps.api.models.mixins.ModelReprMixin, models.Model),
+ ),
+ migrations.AddConstraint(
+ model_name='mailinglistseenitem',
+ constraint=models.UniqueConstraint(fields=('list', 'hash'), name='unique_list_and_hash'),
+ ),
+ ]
diff --git a/pydis_site/apps/api/migrations/0094_migrate_mailing_listdata.py b/pydis_site/apps/api/migrations/0094_migrate_mailing_listdata.py
new file mode 100644
index 00000000..50598025
--- /dev/null
+++ b/pydis_site/apps/api/migrations/0094_migrate_mailing_listdata.py
@@ -0,0 +1,41 @@
+# Generated by Django 5.0 on 2023-12-13 07:03
+
+from django.db import migrations
+
+
+def migrate_mailing_lists_into_new_model(apps, schema_editor):
+ """Move the bot's mailing list information from the BotSetting to the new MailingList model."""
+
+ BotSetting = apps.get_model('api', 'BotSetting')
+ MailingList = apps.get_model('api', 'MailingList')
+ MailingListSeenItem = apps.get_model('api', 'MailingListSeenItem')
+ try:
+ setting = BotSetting.objects.get(name='news')
+ except BotSetting.DoesNotExist:
+ return
+
+ # Field format:
+ # {
+ # "pep": [
+ # "644",
+ # "8102",
+ # ...
+ for list_name, item_hashes in setting.data.items():
+ (mailing_list, _created) = MailingList.objects.get_or_create(name=list_name)
+ MailingListSeenItem.objects.bulk_create(
+ MailingListSeenItem(list=mailing_list, hash=item_hash)
+ for item_hash in item_hashes
+ )
+
+ setting.delete()
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('api', '0093_add_mailing_lists'),
+ ]
+
+ operations = [
+ migrations.RunPython(migrate_mailing_lists_into_new_model, elidable=True)
+ ]