# Generated by Django 4.2.7 on 2025-12-09 21:02 from django.conf import settings from django.db import migrations, models import django.db.models.deletion class Migration(migrations.Migration): initial = True dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), ("contenttypes", "0002_remove_content_type_name"), ] operations = [ migrations.CreateModel( name="NotificationTemplate", fields=[ ( "id", models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "notification_type", models.CharField( max_length=50, unique=True, verbose_name="Тип уведомления" ), ), ( "in_app_title", models.CharField( blank=True, max_length=200, verbose_name="Заголовок (внутри приложения)", ), ), ( "in_app_message", models.TextField( blank=True, verbose_name="Сообщение (внутри приложения)" ), ), ( "email_subject", models.CharField( blank=True, max_length=200, verbose_name="Тема email" ), ), ( "email_body", models.TextField(blank=True, verbose_name="Тело email (HTML)"), ), ( "telegram_message", models.TextField(blank=True, verbose_name="Сообщение Telegram"), ), ( "variables", models.JSONField( blank=True, default=list, help_text="Список доступных переменных для подстановки", verbose_name="Переменные шаблона", ), ), ( "is_active", models.BooleanField(default=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": "notification_templates", }, ), migrations.CreateModel( name="NotificationPreference", fields=[ ( "id", models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "enabled", models.BooleanField( default=True, verbose_name="Уведомления включены" ), ), ( "email_enabled", models.BooleanField(default=True, verbose_name="Email уведомления"), ), ( "telegram_enabled", models.BooleanField( default=False, verbose_name="Telegram уведомления" ), ), ( "in_app_enabled", models.BooleanField( default=True, verbose_name="Внутренние уведомления" ), ), ( "type_preferences", models.JSONField( blank=True, default=dict, help_text="Настройки для каждого типа уведомлений", verbose_name="Настройки по типам", ), ), ( "quiet_hours_enabled", models.BooleanField( default=False, verbose_name="Режим тишины включен" ), ), ( "quiet_hours_start", models.TimeField( blank=True, null=True, verbose_name="Начало режима тишины" ), ), ( "quiet_hours_end", models.TimeField( 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="Дата обновления"), ), ( "user", models.OneToOneField( on_delete=django.db.models.deletion.CASCADE, related_name="notification_preferences", to=settings.AUTH_USER_MODEL, verbose_name="Пользователь", ), ), ], options={ "verbose_name": "Настройки уведомлений", "verbose_name_plural": "Настройки уведомлений", "db_table": "notification_preferences", }, ), migrations.CreateModel( name="Notification", fields=[ ( "id", models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "notification_type", models.CharField( choices=[ ("lesson_created", "Создано занятие"), ("lesson_updated", "Занятие обновлено"), ("lesson_cancelled", "Занятие отменено"), ("lesson_rescheduled", "Занятие перенесено"), ("lesson_reminder", "Напоминание о занятии"), ("lesson_started", "Занятие началось"), ("lesson_completed", "Занятие завершено"), ("homework_assigned", "Назначено домашнее задание"), ("homework_submitted", "ДЗ сдано"), ("homework_reviewed", "ДЗ проверено"), ("material_added", "Добавлен материал"), ("message_received", "Новое сообщение"), ("subscription_expiring", "Подписка истекает"), ("subscription_expired", "Подписка истекла"), ("payment_received", "Платеж получен"), ("system", "Системное уведомление"), ], db_index=True, max_length=50, verbose_name="Тип уведомления", ), ), ( "channel", models.CharField( choices=[ ("in_app", "Внутри приложения"), ("email", "Email"), ("telegram", "Telegram"), ], default="in_app", max_length=20, verbose_name="Канал отправки", ), ), ( "priority", models.CharField( choices=[ ("low", "Низкий"), ("normal", "Обычный"), ("high", "Высокий"), ("urgent", "Срочный"), ], default="normal", max_length=20, verbose_name="Приоритет", ), ), ("title", models.CharField(max_length=200, verbose_name="Заголовок")), ("message", models.TextField(verbose_name="Сообщение")), ( "data", models.JSONField( blank=True, default=dict, help_text="Дополнительная информация в формате JSON", verbose_name="Дополнительные данные", ), ), ( "object_id", models.PositiveIntegerField( blank=True, null=True, verbose_name="ID объекта" ), ), ( "action_url", models.CharField( blank=True, help_text="URL для перехода при клике на уведомление", max_length=500, verbose_name="Ссылка для действия", ), ), ( "is_read", models.BooleanField( db_index=True, default=False, verbose_name="Прочитано" ), ), ( "read_at", models.DateTimeField( blank=True, null=True, verbose_name="Время прочтения" ), ), ( "is_sent", models.BooleanField(default=False, verbose_name="Отправлено"), ), ( "sent_at", models.DateTimeField( blank=True, null=True, verbose_name="Время отправки" ), ), ( "send_error", models.TextField(blank=True, verbose_name="Ошибка отправки"), ), ( "created_at", models.DateTimeField( auto_now_add=True, db_index=True, verbose_name="Дата создания" ), ), ( "scheduled_for", models.DateTimeField( blank=True, help_text="Время когда нужно отправить уведомление", null=True, verbose_name="Запланировано на", ), ), ( "expires_at", models.DateTimeField( blank=True, help_text="После этого времени уведомление неактуально", null=True, verbose_name="Истекает", ), ), ( "content_type", models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to="contenttypes.contenttype", verbose_name="Тип объекта", ), ), ( "recipient", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="notifications", to=settings.AUTH_USER_MODEL, verbose_name="Получатель", ), ), ], options={ "verbose_name": "Уведомление", "verbose_name_plural": "Уведомления", "db_table": "notifications", "ordering": ["-created_at"], "indexes": [ models.Index( fields=["recipient", "-created_at"], name="notificatio_recipie_2d3764_idx", ), models.Index( fields=["recipient", "is_read"], name="notificatio_recipie_583549_idx", ), models.Index( fields=["notification_type", "created_at"], name="notificatio_notific_4b40ec_idx", ), models.Index( fields=["is_sent", "scheduled_for"], name="notificatio_is_sent_3b099f_idx", ), ], }, ), ]