aboutsummaryrefslogtreecommitdiffstats
path: root/pydis_site/apps/api/migrations
diff options
context:
space:
mode:
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)
+ ]