# Generated migration for polls feature import django.db.models.deletion from django.conf import settings from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), ("communications", "0018_add_forwarded_metadata"), ] operations = [ # Таблица голосований migrations.CreateModel( name="Poll", fields=[ ( "id", models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("question", models.CharField(max_length=500, verbose_name="Вопрос")), ( "is_anonymous", models.BooleanField( default=False, verbose_name="Анонимное голосование" ), ), ( "is_multiple_choice", models.BooleanField( default=False, verbose_name="Множественный выбор" ), ), ( "is_quiz", models.BooleanField(default=False, verbose_name="Викторина"), ), ( "allows_custom_answers", models.BooleanField( default=False, verbose_name="Разрешить свои варианты" ), ), ( "is_closed", models.BooleanField( default=False, verbose_name="Голосование закрыто" ), ), ( "closed_at", models.DateTimeField( blank=True, null=True, verbose_name="Время закрытия" ), ), ( "closes_at", models.DateTimeField( blank=True, null=True, verbose_name="Автоматическое закрытие" ), ), ( "created_at", models.DateTimeField(auto_now_add=True, verbose_name="Создано"), ), ( "updated_at", models.DateTimeField(auto_now=True, verbose_name="Обновлено"), ), ( "total_voters", models.IntegerField(default=0, verbose_name="Всего проголосовало"), ), ( "author", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="created_polls", to=settings.AUTH_USER_MODEL, verbose_name="Автор", ), ), ( "message", models.OneToOneField( on_delete=django.db.models.deletion.CASCADE, related_name="poll", to="communications.message", verbose_name="Сообщение", ), ), ], options={ "verbose_name": "Голосование", "verbose_name_plural": "Голосования", "ordering": ["-created_at"], }, ), # Таблица вариантов ответа migrations.CreateModel( name="PollOption", fields=[ ( "id", models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "text", models.CharField(max_length=200, verbose_name="Текст варианта"), ), ( "position", models.IntegerField(default=0, verbose_name="Порядковый номер"), ), ( "vote_count", models.IntegerField(default=0, verbose_name="Количество голосов"), ), ( "is_correct", models.BooleanField(default=False, verbose_name="Правильный ответ"), ), ( "created_at", models.DateTimeField(auto_now_add=True, verbose_name="Создан"), ), ( "poll", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="options", to="communications.poll", verbose_name="Голосование", ), ), ], options={ "verbose_name": "Вариант ответа", "verbose_name_plural": "Варианты ответов", "ordering": ["position", "id"], }, ), # Таблица голосов migrations.CreateModel( name="PollVote", fields=[ ( "id", models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "voted_at", models.DateTimeField( auto_now_add=True, verbose_name="Время голосования" ), ), ( "option", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="votes", to="communications.polloption", verbose_name="Выбранный вариант", ), ), ( "poll", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="votes", to="communications.poll", verbose_name="Голосование", ), ), ( "voter", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="poll_votes", to=settings.AUTH_USER_MODEL, verbose_name="Проголосовавший", ), ), ], options={ "verbose_name": "Голос", "verbose_name_plural": "Голоса", "ordering": ["-voted_at"], }, ), # Индексы и констрейнты migrations.AddIndex( model_name="poll", index=models.Index(fields=["message"], name="comm_msg_idx_poll"), ), migrations.AddIndex( model_name="poll", index=models.Index( fields=["author", "created_at"], name="comm_auth_created_poll" ), ), migrations.AddIndex( model_name="poll", index=models.Index( fields=["is_closed", "closes_at"], name="comm_closed_closes_poll" ), ), migrations.AddIndex( model_name="polloption", index=models.Index(fields=["poll", "position"], name="comm_poll_pos_idx"), ), migrations.AddIndex( model_name="pollvote", index=models.Index(fields=["poll", "voter"], name="comm_poll_voter_idx"), ), migrations.AddIndex( model_name="pollvote", index=models.Index(fields=["option"], name="comm_option_idx"), ), # Уникальность голоса migrations.AddConstraint( model_name="pollvote", constraint=models.UniqueConstraint( fields=["poll", "voter", "option"], name="unique_vote_per_option" ), ), ]