diff options
Diffstat (limited to 'pydis_site')
3 files changed, 112 insertions, 12 deletions
diff --git a/pydis_site/apps/api/migrations/0068_split_nomination_tables.py b/pydis_site/apps/api/migrations/0068_split_nomination_tables.py new file mode 100644 index 00000000..2e2313ee --- /dev/null +++ b/pydis_site/apps/api/migrations/0068_split_nomination_tables.py @@ -0,0 +1,60 @@ +# Generated by Django 3.0.11 on 2021-02-21 15:32 + +from django.apps.registry import Apps +from django.db import backends, migrations, models +from django.db.backends.base.schema import BaseDatabaseSchemaEditor +import django.db.models.deletion +import pydis_site.apps.api.models.mixins + + +def migrate_nominations(apps: Apps, schema_editor: BaseDatabaseSchemaEditor) -> None: +    Nomination = apps.get_model("api", "Nomination") +    NominationEntry = apps.get_model("api", "NominationEntry") + +    for nomination in Nomination.objects.all(): +        nomination_entry = NominationEntry( +            nomination=nomination, +            actor=nomination.actor, +            reason=nomination.reason, +            inserted_at=nomination.inserted_at +        ) +        nomination_entry.save() + + +class Migration(migrations.Migration): + +    dependencies = [ +        ('api', '0067_add_voice_ban_infraction_type'), +    ] + +    operations = [ +        migrations.CreateModel( +            name='NominationEntry', +            fields=[ +                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), +                ('reason', models.TextField(blank=True, help_text='Why the actor nominated this user.', null=True)), +                ('inserted_at', +                 models.DateTimeField(auto_now_add=True, help_text='The creation date of this nomination entry.')), +                ('actor', models.ForeignKey(help_text='The staff member that nominated this user.', +                                            on_delete=django.db.models.deletion.CASCADE, related_name='nomination_set', +                                            to='api.User')), +                ('nomination', models.ForeignKey(help_text='Nomination to what this entry belongs.', +                                                 on_delete=django.db.models.deletion.CASCADE, to='api.Nomination')), +            ], +            bases=(pydis_site.apps.api.models.mixins.ModelReprMixin, models.Model), +        ), +        migrations.RunPython(migrate_nominations), +        migrations.RemoveField( +            model_name='nomination', +            name='actor', +        ), +        migrations.RemoveField( +            model_name='nomination', +            name='reason', +        ), +        migrations.AddField( +            model_name='nomination', +            name='reviewed', +            field=models.BooleanField(default=False, help_text='Whether voting message have been made.'), +        ), +    ] diff --git a/pydis_site/apps/api/migrations/0069_change_nomination_entry_plural.py b/pydis_site/apps/api/migrations/0069_change_nomination_entry_plural.py new file mode 100644 index 00000000..6bf4ac8c --- /dev/null +++ b/pydis_site/apps/api/migrations/0069_change_nomination_entry_plural.py @@ -0,0 +1,17 @@ +# Generated by Django 3.0.11 on 2021-02-21 16:44 + +from django.db import migrations + + +class Migration(migrations.Migration): + +    dependencies = [ +        ('api', '0068_split_nomination_tables'), +    ] + +    operations = [ +        migrations.AlterModelOptions( +            name='nominationentry', +            options={'verbose_name_plural': 'nomination entries'}, +        ), +    ] diff --git a/pydis_site/apps/api/models/bot/nomination.py b/pydis_site/apps/api/models/bot/nomination.py index 11b9e36e..ed6f7d81 100644 --- a/pydis_site/apps/api/models/bot/nomination.py +++ b/pydis_site/apps/api/models/bot/nomination.py @@ -5,23 +5,12 @@ from pydis_site.apps.api.models.mixins import ModelReprMixin  class Nomination(ModelReprMixin, models.Model): -    """A helper nomination created by staff.""" +    """A general helper nomination information created by staff."""      active = models.BooleanField(          default=True,          help_text="Whether this nomination is still relevant."      ) -    actor = models.ForeignKey( -        User, -        on_delete=models.CASCADE, -        help_text="The staff member that nominated this user.", -        related_name='nomination_set' -    ) -    reason = models.TextField( -        help_text="Why this user was nominated.", -        null=True, -        blank=True -    )      user = models.ForeignKey(          User,          on_delete=models.CASCADE, @@ -42,6 +31,10 @@ class Nomination(ModelReprMixin, models.Model):          help_text="When the nomination was ended.",          null=True      ) +    reviewed = models.BooleanField( +        default=False, +        help_text="Whether voting message have been made." +    )      def __str__(self):          """Representation that makes the target and state of the nomination immediately evident.""" @@ -52,3 +45,33 @@ class Nomination(ModelReprMixin, models.Model):          """Set the ordering of nominations to most recent first."""          ordering = ("-inserted_at",) + + +class NominationEntry(ModelReprMixin, models.Model): +    """A nomination entry created by single staff.""" + +    nomination = models.ForeignKey( +        Nomination, +        on_delete=models.CASCADE, +        help_text="Nomination to what this entry belongs." +    ) +    actor = models.ForeignKey( +        User, +        on_delete=models.CASCADE, +        help_text="The staff member that nominated this user.", +        related_name='nomination_set' +    ) +    reason = models.TextField( +        help_text="Why the actor nominated this user.", +        null=True, +        blank=True +    ) +    inserted_at = models.DateTimeField( +        auto_now_add=True, +        help_text="The creation date of this nomination entry." +    ) + +    class Meta: +        """Meta options for NominationEntry model.""" + +        verbose_name_plural = "nomination entries"  |