# Generated by Django 5.1.15 on 2026-09-02 00:25 import django.db.models.deletion from django.conf import settings from django.db import migrations, models class Migration(migrations.Migration): initial = True dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.CreateModel( name='AppSession', fields=[ ('id', models.CharField(max_length=36, primary_key=True, serialize=False)), ('platform', models.CharField(blank=True, max_length=30, verbose_name='پلتفرم')), ('app_version', models.CharField(blank=True, max_length=30, verbose_name='نسخه\u200cی اپ')), ('ip_address', models.GenericIPAddressField(blank=True, null=True, verbose_name='آی\u200cپی')), ('started_at', models.DateTimeField(verbose_name='شروع')), ('ended_at', models.DateTimeField(blank=True, null=True, verbose_name='پایان')), ('created_at', models.DateTimeField(auto_now_add=True)), ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='app_sessions', to=settings.AUTH_USER_MODEL, verbose_name='کاربر')), ], options={ 'verbose_name': 'جلسه\u200cی استفاده از اپ', 'verbose_name_plural': 'جلسه\u200cهای استفاده از اپ', 'ordering': ['-started_at'], }, ), migrations.CreateModel( name='ClickEvent', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('screen_name', models.CharField(blank=True, max_length=150, verbose_name='نام صفحه')), ('element', models.CharField(blank=True, max_length=150, verbose_name='برچسبِ عنصر (اختیاری)')), ('x', models.FloatField(blank=True, null=True)), ('y', models.FloatField(blank=True, null=True)), ('created_at', models.DateTimeField(verbose_name='زمان')), ('session', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='clicks', to='telemetry.appsession')), ], options={ 'verbose_name': 'رویداد کلیک', 'verbose_name_plural': 'رویدادهای کلیک', 'ordering': ['-created_at'], }, ), migrations.CreateModel( name='ClientErrorLog', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('screen_name', models.CharField(blank=True, max_length=150, verbose_name='نام صفحه')), ('message', models.TextField(verbose_name='پیام خطا')), ('stack_trace', models.TextField(blank=True, verbose_name='Stack trace')), ('created_at', models.DateTimeField(verbose_name='زمان')), ('session', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='errors', to='telemetry.appsession')), ], options={ 'verbose_name': 'خطای سمت کاربر', 'verbose_name_plural': 'خطاهای سمت کاربر', 'ordering': ['-created_at'], }, ), migrations.CreateModel( name='PageView', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('screen_name', models.CharField(max_length=150, verbose_name='نام صفحه')), ('entered_at', models.DateTimeField(verbose_name='زمان ورود')), ('duration_seconds', models.FloatField(blank=True, null=True, verbose_name='مدت ماندن (ثانیه)')), ('session', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='page_views', to='telemetry.appsession')), ], options={ 'verbose_name': 'بازدید صفحه', 'verbose_name_plural': 'بازدیدهای صفحه', 'ordering': ['entered_at'], }, ), migrations.CreateModel( name='ApiCallLog', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('method', models.CharField(max_length=10, verbose_name='متد')), ('path', models.CharField(max_length=255, verbose_name='مسیر')), ('status_code', models.PositiveSmallIntegerField(verbose_name='کد وضعیت')), ('duration_ms', models.FloatField(verbose_name='زمان پاسخ (میلی\u200cثانیه)')), ('ip_address', models.GenericIPAddressField(blank=True, null=True, verbose_name='آی\u200cپی')), ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='زمان')), ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='api_calls', to=settings.AUTH_USER_MODEL, verbose_name='کاربر')), ], options={ 'verbose_name': 'لاگ فراخوانی API', 'verbose_name_plural': 'لاگ\u200cهای فراخوانی API', 'ordering': ['-created_at'], 'indexes': [models.Index(fields=['user', 'created_at'], name='telemetry_a_user_id_7a7591_idx'), models.Index(fields=['path', 'created_at'], name='telemetry_a_path_267c85_idx')], }, ), migrations.AddIndex( model_name='appsession', index=models.Index(fields=['user', 'started_at'], name='telemetry_a_user_id_142b1f_idx'), ), migrations.AddIndex( model_name='clickevent', index=models.Index(fields=['screen_name'], name='telemetry_c_screen__d3940b_idx'), ), migrations.AddIndex( model_name='pageview', index=models.Index(fields=['screen_name'], name='telemetry_p_screen__242757_idx'), ), ]