# Generated by Django 5.2.4 on 2025-08-26 07:37 import django.core.validators import django.db.models.deletion from django.conf import settings from django.db import migrations, models import feed.models class Migration(migrations.Migration): initial = True dependencies = [ ("employees", "0019_delete_education"), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.CreateModel( name="Post", fields=[ ( "id", models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("title", models.CharField(max_length=200, verbose_name="Заголовок")), ("body", models.TextField(verbose_name="Текст")), ( "created_at", models.DateTimeField(auto_now_add=True, verbose_name="Создано"), ), ( "pinned", models.BooleanField(default=False, verbose_name="Закреплено"), ), ( "type", models.CharField( choices=[ ("company", "Новость компании"), ("department", "Новость отдела"), ("employee", "Публикация сотрудника"), ], max_length=20, verbose_name="Тип публикации", ), ), ( "image", models.ImageField( blank=True, null=True, upload_to="feed/images/%Y/%m/", verbose_name="Изображение", ), ), ( "attachment", models.FileField( blank=True, null=True, upload_to="feed/attachments/%Y/%m/", verbose_name="Вложение", ), ), ( "likes_count", models.PositiveIntegerField( db_index=True, default=0, verbose_name="Лайки" ), ), ( "author", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="posts", to=settings.AUTH_USER_MODEL, verbose_name="Автор", ), ), ( "department", models.ForeignKey( blank=True, help_text="Для новостей отдела укажите отдел. Для других типов оставьте пустым.", null=True, on_delete=django.db.models.deletion.PROTECT, related_name="posts", to="employees.department", verbose_name="Отдел", ), ), ], options={ "verbose_name": "Публикация", "verbose_name_plural": "Публикации", "ordering": ["-pinned", "-created_at"], }, ), migrations.CreateModel( name="Comment", fields=[ ( "id", models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "text", models.TextField( blank=True, default="", verbose_name="Комментарий" ), ), ( "image", models.ImageField( blank=True, null=True, upload_to="feed/comments/images/%Y/%m/", validators=[ django.core.validators.FileExtensionValidator( allowed_extensions=["jpg", "jpeg", "png", "gif", "webp"] ), feed.models.FileSizeValidator(10), ], verbose_name="Изображение", ), ), ( "attachment", models.FileField( blank=True, null=True, upload_to="feed/comments/attachments/%Y/%m/", validators=[ django.core.validators.FileExtensionValidator( allowed_extensions=[ "pdf", "doc", "docx", "xls", "xlsx", "txt", "csv", "png", "jpg", "jpeg", "gif", "zip", "rar", "7z", ] ), feed.models.FileSizeValidator(25), ], verbose_name="Вложение", ), ), ( "created_at", models.DateTimeField(auto_now_add=True, verbose_name="Создано"), ), ( "author", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="comments", to=settings.AUTH_USER_MODEL, verbose_name="Автор", ), ), ( "post", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="comments", to="feed.post", verbose_name="Публикация", ), ), ], options={ "verbose_name": "Комментарий", "verbose_name_plural": "Комментарии", "ordering": ["created_at"], }, ), migrations.CreateModel( name="PostLike", fields=[ ( "id", models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("created_at", models.DateTimeField(auto_now_add=True)), ( "post", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="likes", to="feed.post", verbose_name="Пост", ), ), ( "user", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="post_likes", to=settings.AUTH_USER_MODEL, verbose_name="Пользователь", ), ), ], options={ "verbose_name": "Лайк", "verbose_name_plural": "Лайки", }, ), migrations.AddIndex( model_name="post", index=models.Index( fields=["type", "created_at"], name="feed_post_type_b00891_idx" ), ), migrations.AddIndex( model_name="post", index=models.Index( fields=["pinned", "created_at"], name="feed_post_pinned_e86c9a_idx" ), ), migrations.AddIndex( model_name="post", index=models.Index( fields=["created_at"], name="feed_post_created_ddd8c4_idx" ), ), migrations.AddIndex( model_name="post", index=models.Index( fields=["department", "-created_at"], name="feed_post_departm_b35669_idx", ), ), migrations.AddIndex( model_name="post", index=models.Index( fields=["author", "-created_at"], name="feed_post_author__c854fa_idx" ), ), migrations.AddConstraint( model_name="post", constraint=models.CheckConstraint( condition=models.Q( models.Q(("department__isnull", False), ("type", "department")), models.Q(("type", "department"), _negated=True), _connector="OR", ), name="post_department_required_when_type_is_department", ), ), migrations.AddConstraint( model_name="post", constraint=models.CheckConstraint( condition=models.Q( ("type", "department"), ("department__isnull", True), _connector="OR", ), name="post_department_null_when_type_not_department", ), ), migrations.AddConstraint( model_name="post", constraint=models.CheckConstraint( condition=models.Q(("likes_count__gte", 0)), name="post_likes_count_non_negative", ), ), migrations.AddIndex( model_name="comment", index=models.Index( fields=["created_at"], name="feed_commen_created_a85775_idx" ), ), migrations.AddIndex( model_name="comment", index=models.Index( fields=["post", "created_at"], name="feed_commen_post_id_3fe3f3_idx" ), ), migrations.AddIndex( model_name="comment", index=models.Index( fields=["author", "created_at"], name="feed_commen_author__b1fbf5_idx" ), ), migrations.AddConstraint( model_name="comment", constraint=models.CheckConstraint( condition=models.Q( models.Q( ("text__isnull", False), models.Q(("text", ""), _negated=True) ), ("image__isnull", False), ("attachment__isnull", False), _connector="OR", ), name="comment_has_any_content_v3", violation_error_message="Нужно указать текст, изображение или файл.", ), ), migrations.AddIndex( model_name="postlike", index=models.Index( fields=["user", "created_at"], name="feed_postli_user_id_15e79d_idx" ), ), migrations.AddIndex( model_name="postlike", index=models.Index( fields=["post", "created_at"], name="feed_postli_post_id_2897d2_idx" ), ), migrations.AddConstraint( model_name="postlike", constraint=models.UniqueConstraint( fields=("post", "user"), name="uq_postlike_post_user" ), ), ]