115 lines
6.3 KiB
Python
115 lines
6.3 KiB
Python
|
|
# 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'),
|
||
|
|
),
|
||
|
|
]
|