408 lines
15 KiB
Python
408 lines
15 KiB
Python
# Generated by Django 4.2.7 on 2025-12-09 21:02
|
||
|
||
import apps.materials.models
|
||
from django.conf import settings
|
||
from django.db import migrations, models
|
||
import django.db.models.deletion
|
||
|
||
|
||
class Migration(migrations.Migration):
|
||
initial = True
|
||
|
||
dependencies = [
|
||
("homework", "0001_initial"),
|
||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||
]
|
||
|
||
operations = [
|
||
migrations.CreateModel(
|
||
name="Material",
|
||
fields=[
|
||
(
|
||
"id",
|
||
models.BigAutoField(
|
||
auto_created=True,
|
||
primary_key=True,
|
||
serialize=False,
|
||
verbose_name="ID",
|
||
),
|
||
),
|
||
("title", models.CharField(max_length=255, verbose_name="Название")),
|
||
("description", models.TextField(blank=True, verbose_name="Описание")),
|
||
(
|
||
"file",
|
||
models.FileField(
|
||
blank=True,
|
||
max_length=500,
|
||
upload_to=apps.materials.models.material_file_upload_path,
|
||
verbose_name="Файл",
|
||
),
|
||
),
|
||
(
|
||
"file_name",
|
||
models.CharField(
|
||
blank=True, max_length=255, verbose_name="Имя файла"
|
||
),
|
||
),
|
||
(
|
||
"file_size",
|
||
models.BigIntegerField(
|
||
default=0, verbose_name="Размер файла (bytes)"
|
||
),
|
||
),
|
||
(
|
||
"file_type",
|
||
models.CharField(
|
||
blank=True, max_length=100, verbose_name="MIME тип"
|
||
),
|
||
),
|
||
(
|
||
"url",
|
||
models.URLField(blank=True, max_length=500, verbose_name="Ссылка"),
|
||
),
|
||
(
|
||
"material_type",
|
||
models.CharField(
|
||
choices=[
|
||
("document", "Документ"),
|
||
("presentation", "Презентация"),
|
||
("video", "Видео"),
|
||
("audio", "Аудио"),
|
||
("image", "Изображение"),
|
||
("archive", "Архив"),
|
||
("link", "Ссылка"),
|
||
("other", "Другое"),
|
||
],
|
||
db_index=True,
|
||
default="other",
|
||
max_length=20,
|
||
verbose_name="Тип материала",
|
||
),
|
||
),
|
||
(
|
||
"access_type",
|
||
models.CharField(
|
||
choices=[
|
||
("private", "Приватный"),
|
||
("public", "Публичный"),
|
||
("lesson", "Для занятия"),
|
||
("clients", "Для клиентов"),
|
||
],
|
||
db_index=True,
|
||
default="private",
|
||
max_length=20,
|
||
verbose_name="Тип доступа",
|
||
),
|
||
),
|
||
(
|
||
"allow_download",
|
||
models.BooleanField(
|
||
default=True, verbose_name="Разрешить скачивание"
|
||
),
|
||
),
|
||
(
|
||
"is_featured",
|
||
models.BooleanField(default=False, verbose_name="Избранный"),
|
||
),
|
||
(
|
||
"views_count",
|
||
models.IntegerField(
|
||
default=0, verbose_name="Количество просмотров"
|
||
),
|
||
),
|
||
(
|
||
"downloads_count",
|
||
models.IntegerField(
|
||
default=0, verbose_name="Количество скачиваний"
|
||
),
|
||
),
|
||
(
|
||
"is_deleted",
|
||
models.BooleanField(
|
||
db_index=True, default=False, verbose_name="Удален"
|
||
),
|
||
),
|
||
(
|
||
"deleted_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="Дата обновления"),
|
||
),
|
||
],
|
||
options={
|
||
"verbose_name": "Материал",
|
||
"verbose_name_plural": "Материалы",
|
||
"db_table": "materials",
|
||
"ordering": ["-created_at"],
|
||
},
|
||
),
|
||
migrations.CreateModel(
|
||
name="MaterialTag",
|
||
fields=[
|
||
(
|
||
"id",
|
||
models.BigAutoField(
|
||
auto_created=True,
|
||
primary_key=True,
|
||
serialize=False,
|
||
verbose_name="ID",
|
||
),
|
||
),
|
||
(
|
||
"name",
|
||
models.CharField(
|
||
max_length=50, unique=True, verbose_name="Название"
|
||
),
|
||
),
|
||
("slug", models.SlugField(unique=True, verbose_name="Слаг")),
|
||
(
|
||
"color",
|
||
models.CharField(
|
||
default="#007bff", max_length=7, verbose_name="Цвет"
|
||
),
|
||
),
|
||
(
|
||
"materials_count",
|
||
models.IntegerField(
|
||
default=0, verbose_name="Количество материалов"
|
||
),
|
||
),
|
||
(
|
||
"created_at",
|
||
models.DateTimeField(
|
||
auto_now_add=True, verbose_name="Дата создания"
|
||
),
|
||
),
|
||
],
|
||
options={
|
||
"verbose_name": "Тег материала",
|
||
"verbose_name_plural": "Теги материалов",
|
||
"db_table": "material_tags",
|
||
"ordering": ["name"],
|
||
},
|
||
),
|
||
migrations.CreateModel(
|
||
name="StorageQuota",
|
||
fields=[
|
||
(
|
||
"id",
|
||
models.BigAutoField(
|
||
auto_created=True,
|
||
primary_key=True,
|
||
serialize=False,
|
||
verbose_name="ID",
|
||
),
|
||
),
|
||
(
|
||
"total_quota",
|
||
models.BigIntegerField(
|
||
default=1073741824, verbose_name="Общая квота (bytes)"
|
||
),
|
||
),
|
||
(
|
||
"used_space",
|
||
models.BigIntegerField(
|
||
default=0, verbose_name="Использовано (bytes)"
|
||
),
|
||
),
|
||
(
|
||
"created_at",
|
||
models.DateTimeField(
|
||
auto_now_add=True, verbose_name="Дата создания"
|
||
),
|
||
),
|
||
(
|
||
"updated_at",
|
||
models.DateTimeField(auto_now=True, verbose_name="Дата обновления"),
|
||
),
|
||
(
|
||
"user",
|
||
models.OneToOneField(
|
||
on_delete=django.db.models.deletion.CASCADE,
|
||
related_name="storage_quota",
|
||
to=settings.AUTH_USER_MODEL,
|
||
verbose_name="Пользователь",
|
||
),
|
||
),
|
||
],
|
||
options={
|
||
"verbose_name": "Квота хранилища",
|
||
"verbose_name_plural": "Квоты хранилища",
|
||
"db_table": "storage_quotas",
|
||
},
|
||
),
|
||
migrations.CreateModel(
|
||
name="MaterialFolder",
|
||
fields=[
|
||
(
|
||
"id",
|
||
models.BigAutoField(
|
||
auto_created=True,
|
||
primary_key=True,
|
||
serialize=False,
|
||
verbose_name="ID",
|
||
),
|
||
),
|
||
("name", models.CharField(max_length=255, verbose_name="Название")),
|
||
("description", models.TextField(blank=True, verbose_name="Описание")),
|
||
(
|
||
"is_public",
|
||
models.BooleanField(default=False, verbose_name="Публичная"),
|
||
),
|
||
(
|
||
"materials_count",
|
||
models.IntegerField(
|
||
default=0, verbose_name="Количество материалов"
|
||
),
|
||
),
|
||
(
|
||
"created_at",
|
||
models.DateTimeField(
|
||
auto_now_add=True, verbose_name="Дата создания"
|
||
),
|
||
),
|
||
(
|
||
"updated_at",
|
||
models.DateTimeField(auto_now=True, verbose_name="Дата обновления"),
|
||
),
|
||
(
|
||
"owner",
|
||
models.ForeignKey(
|
||
on_delete=django.db.models.deletion.CASCADE,
|
||
related_name="material_folders",
|
||
to=settings.AUTH_USER_MODEL,
|
||
verbose_name="Владелец",
|
||
),
|
||
),
|
||
(
|
||
"parent",
|
||
models.ForeignKey(
|
||
blank=True,
|
||
null=True,
|
||
on_delete=django.db.models.deletion.CASCADE,
|
||
related_name="subfolders",
|
||
to="materials.materialfolder",
|
||
verbose_name="Родительская папка",
|
||
),
|
||
),
|
||
(
|
||
"shared_with",
|
||
models.ManyToManyField(
|
||
blank=True,
|
||
related_name="shared_folders",
|
||
to=settings.AUTH_USER_MODEL,
|
||
verbose_name="Доступ предоставлен",
|
||
),
|
||
),
|
||
],
|
||
options={
|
||
"verbose_name": "Папка материалов",
|
||
"verbose_name_plural": "Папки материалов",
|
||
"db_table": "material_folders",
|
||
"ordering": ["name"],
|
||
},
|
||
),
|
||
migrations.CreateModel(
|
||
name="MaterialAccess",
|
||
fields=[
|
||
(
|
||
"id",
|
||
models.BigAutoField(
|
||
auto_created=True,
|
||
primary_key=True,
|
||
serialize=False,
|
||
verbose_name="ID",
|
||
),
|
||
),
|
||
(
|
||
"action",
|
||
models.CharField(
|
||
choices=[
|
||
("view", "Просмотр"),
|
||
("download", "Скачивание"),
|
||
("share", "Предоставление доступа"),
|
||
],
|
||
max_length=20,
|
||
verbose_name="Действие",
|
||
),
|
||
),
|
||
(
|
||
"ip_address",
|
||
models.GenericIPAddressField(
|
||
blank=True, null=True, verbose_name="IP адрес"
|
||
),
|
||
),
|
||
(
|
||
"user_agent",
|
||
models.CharField(
|
||
blank=True, max_length=500, verbose_name="User Agent"
|
||
),
|
||
),
|
||
(
|
||
"created_at",
|
||
models.DateTimeField(
|
||
auto_now_add=True, db_index=True, verbose_name="Дата"
|
||
),
|
||
),
|
||
(
|
||
"material",
|
||
models.ForeignKey(
|
||
on_delete=django.db.models.deletion.CASCADE,
|
||
related_name="access_logs",
|
||
to="materials.material",
|
||
verbose_name="Материал",
|
||
),
|
||
),
|
||
(
|
||
"user",
|
||
models.ForeignKey(
|
||
on_delete=django.db.models.deletion.CASCADE,
|
||
related_name="material_accesses",
|
||
to=settings.AUTH_USER_MODEL,
|
||
verbose_name="Пользователь",
|
||
),
|
||
),
|
||
],
|
||
options={
|
||
"verbose_name": "Лог доступа к материалу",
|
||
"verbose_name_plural": "Логи доступа к материалам",
|
||
"db_table": "material_access_logs",
|
||
"ordering": ["-created_at"],
|
||
},
|
||
),
|
||
migrations.AddField(
|
||
model_name="material",
|
||
name="folder",
|
||
field=models.ForeignKey(
|
||
blank=True,
|
||
null=True,
|
||
on_delete=django.db.models.deletion.SET_NULL,
|
||
related_name="materials",
|
||
to="materials.materialfolder",
|
||
verbose_name="Папка",
|
||
),
|
||
),
|
||
migrations.AddField(
|
||
model_name="material",
|
||
name="homework",
|
||
field=models.ForeignKey(
|
||
blank=True,
|
||
null=True,
|
||
on_delete=django.db.models.deletion.SET_NULL,
|
||
related_name="materials",
|
||
to="homework.homework",
|
||
verbose_name="Домашнее задание",
|
||
),
|
||
),
|
||
]
|