Corp/backend/feed/migrations/0001_initial.py
2026-09-07 19:43:48 +03:00

347 lines
12 KiB
Python

# 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"
),
),
]