Corp/backend/communications/migrations/0010_messageattachment.py
Игорь Надеин ddf22c47da fix: автоматическое обновление JWT токенов
- ApiClient теперь обрабатывает 401 и 403 ошибки для обновления токена
- Добавлен JWTRefreshMiddleware для проактивного обновления токенов за 5 минут до истечения
- Добавлена настройка JWT_REFRESH_THRESHOLD_MINUTES (по умолчанию 5)
- Исправлена проблема с периодическими 403 ошибками после истечения access token
2025-11-20 18:52:29 +03:00

35 lines
2.0 KiB
Python

# Generated by Django 5.2.4 on 2025-11-20 12:01
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('communications', '0009_message_deleted_at_message_deleted_by_and_more'),
]
operations = [
migrations.CreateModel(
name='MessageAttachment',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('file', models.FileField(upload_to='chat_attachments/%Y/%m/%d/', verbose_name='Файл')),
('file_type', models.CharField(choices=[('image', 'Изображение'), ('video', 'Видео'), ('audio', 'Аудио'), ('file', 'Файл')], max_length=10, verbose_name='Тип файла')),
('file_name', models.CharField(max_length=255, verbose_name='Название файла')),
('file_size', models.BigIntegerField(verbose_name='Размер файла (байты)')),
('mime_type', models.CharField(blank=True, max_length=100, verbose_name='MIME тип')),
('uploaded_at', models.DateTimeField(auto_now_add=True, verbose_name='Время загрузки')),
('thumbnail', models.ImageField(blank=True, help_text='Для изображений и видео', null=True, upload_to='chat_attachments/thumbnails/%Y/%m/%d/', verbose_name='Миниатюра')),
('message', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attachments', to='communications.message', verbose_name='Сообщение')),
],
options={
'verbose_name': 'Вложение',
'verbose_name_plural': 'Вложения',
'ordering': ['uploaded_at'],
'indexes': [models.Index(fields=['message', 'file_type'], name='communicati_message_7ec201_idx'), models.Index(fields=['uploaded_at'], name='communicati_uploade_015a96_idx')],
},
),
]