# Generated by Django 4.2.27 on 2026-01-22 10:48 import dj_language.field from django.conf import settings from django.db import migrations, models import django.db.models.deletion import phonenumber_field.modelfields import utils.validators class Migration(migrations.Migration): initial = True dependencies = [ ("dj_language", "0002_auto_20220120_1344"), ("auth", "0012_alter_user_first_name_max_length"), ] operations = [ migrations.CreateModel( name="User", fields=[ ( "id", models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("password", models.CharField(max_length=128, verbose_name="password")), ( "last_login", models.DateTimeField( blank=True, null=True, verbose_name="last login" ), ), ( "is_superuser", models.BooleanField( default=False, help_text="Designates that this user has all permissions without explicitly assigning them.", verbose_name="superuser status", ), ), ( "username", models.CharField( blank=True, max_length=150, null=True, unique=True ), ), ( "email", models.EmailField( blank=True, help_text="Enter the user's email address.", max_length=254, null=True, unique=True, verbose_name="Email Address", ), ), ( "fullname", models.CharField( blank=True, help_text="Enter the full name of the user.", max_length=255, null=True, verbose_name="Full Name", ), ), ( "birthdate", models.DateField(blank=True, null=True, verbose_name="birthdate"), ), ( "avatar", models.ImageField( blank=True, max_length=512, null=True, upload_to="users/avatars/%Y/%m/", ), ), ( "phone_number", phonenumber_field.modelfields.PhoneNumberField( blank=True, help_text="e.g., +49 151 12345678", max_length=128, null=True, region=None, validators=[utils.validators.validate_possible_number], verbose_name="Phone Number", ), ), ( "gender", models.CharField( blank=True, choices=[("male", "Male"), ("female", "Female")], help_text="Select the user's gender.", max_length=20, null=True, verbose_name="Gender", ), ), ( "user_type", models.CharField( choices=[ ("professor", "Professor"), ("client", "Client"), ("student", "Student"), ("admin", "Admin"), ("super_admin", "Super Admin"), ], default="client", help_text="Type of the user.", max_length=20, verbose_name="User Type", ), ), ( "date_joined", models.DateTimeField( auto_now_add=True, help_text="The date and time the user registered.", verbose_name="Date Joined", ), ), ( "city", models.CharField( blank=True, max_length=255, null=True, verbose_name="City" ), ), ( "country", models.CharField( blank=True, max_length=255, null=True, verbose_name="country" ), ), ( "device_id", models.CharField( blank=True, max_length=255, null=True, verbose_name="device id" ), ), ( "device_os", models.CharField( choices=[ ("android", "android"), ("apple", "apple"), ("web", "web"), ], max_length=16, null=True, ), ), ( "user_agent", models.TextField(blank=True, null=True, verbose_name="user agent"), ), ( "client_ip", models.TextField(blank=True, null=True, verbose_name="client ip"), ), ("fcm", models.CharField(blank=True, max_length=512, null=True)), ( "slug", models.SlugField( blank=True, max_length=255, null=True, unique=True ), ), ( "experience_years", models.PositiveIntegerField( default=0, verbose_name="Experience years" ), ), ("is_staff", models.BooleanField(default=False)), ( "is_active", models.BooleanField( default=True, help_text="Designates whether this user should be treated as active. Unselect this instead of deleting accounts.", verbose_name="Active", ), ), ("deleted_at", models.DateTimeField(blank=True, null=True)), ("info", models.TextField(blank=True, null=True, verbose_name="Info")), ("skill", models.CharField(blank=True, max_length=512, null=True)), ( "groups", models.ManyToManyField( blank=True, help_text="The groups this user belongs to. A user will get all permissions granted to each of their groups.", related_name="user_set", related_query_name="user", to="auth.group", verbose_name="groups", ), ), ( "language", dj_language.field.LanguageField( default=69, limit_choices_to={"status": True}, null=True, on_delete=django.db.models.deletion.PROTECT, related_name="+", to="dj_language.language", verbose_name="language", ), ), ( "user_permissions", models.ManyToManyField( blank=True, help_text="Specific permissions for this user.", related_name="user_set", related_query_name="user", to="auth.permission", verbose_name="user permissions", ), ), ], options={ "verbose_name": "All Users", "verbose_name_plural": "All Users", "ordering": ("-id",), "unique_together": {("email",)}, }, ), migrations.CreateModel( name="Notification", fields=[ ( "id", models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("title", models.CharField(max_length=255, verbose_name="title")), ("message", models.TextField(max_length=512, verbose_name="message")), ("is_read", models.BooleanField(default=False, verbose_name="is read")), ( "service", models.CharField( choices=[("imam-javad", "Imam Javad"), ("doboodi", "Doboodi")], default="imam-javad", max_length=20, verbose_name="service", ), ), ( "created_at", models.DateTimeField( auto_now_add=True, null=True, verbose_name="created at" ), ), ( "updated_at", models.DateTimeField( auto_now=True, null=True, verbose_name="updated at" ), ), ( "user", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="notifications", to=settings.AUTH_USER_MODEL, verbose_name="user", ), ), ], ), migrations.CreateModel( name="LoginHistory", fields=[ ( "id", models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("lat", models.FloatField(blank=True, null=True, verbose_name="lat")), ("lon", models.FloatField(blank=True, null=True, verbose_name="lon")), ( "country", models.CharField( blank=True, max_length=255, null=True, verbose_name="country" ), ), ( "city", models.CharField( blank=True, max_length=255, null=True, verbose_name="city" ), ), ("ip", models.CharField(max_length=255, null=True)), ("timezone", models.CharField(blank=True, max_length=100, null=True)), ( "user_agent", models.TextField(blank=True, null=True, verbose_name="user agent"), ), ("device_os", models.CharField(blank=True, max_length=16, null=True)), ("at_time", models.DateTimeField(auto_now_add=True)), ( "user", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="login_history", to=settings.AUTH_USER_MODEL, ), ), ], ), migrations.CreateModel( name="LocationHistory", fields=[ ( "id", models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("lat", models.FloatField(verbose_name="lat")), ("lon", models.FloatField(verbose_name="lon")), ( "country", models.CharField( blank=True, max_length=255, null=True, verbose_name="country" ), ), ( "city", models.CharField( blank=True, max_length=255, null=True, verbose_name="city" ), ), ("selected_manually", models.BooleanField(blank=True, null=True)), ("ip", models.CharField(blank=True, max_length=255, null=True)), ("timezone", models.CharField(blank=True, max_length=60, null=True)), ("at_time", models.DateTimeField(auto_now_add=True)), ( "user", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="location_history", to=settings.AUTH_USER_MODEL, ), ), ], ), migrations.CreateModel( name="AdminUser", fields=[], options={ "verbose_name": "Admin User", "verbose_name_plural": "Admin Users", "proxy": True, "indexes": [], "constraints": [], }, bases=("account.user",), ), migrations.CreateModel( name="ClientUser", fields=[], options={ "verbose_name": "user", "verbose_name_plural": "users", "ordering": ("-id",), "proxy": True, "indexes": [], "constraints": [], }, bases=("account.user",), ), migrations.CreateModel( name="ProfessorUser", fields=[], options={ "verbose_name": "Professor User", "verbose_name_plural": "Professor Users", "proxy": True, "indexes": [], "constraints": [], }, bases=("account.user",), ), migrations.CreateModel( name="StudentUser", fields=[], options={ "verbose_name": "Student User", "verbose_name_plural": "Student Users", "proxy": True, "indexes": [], "constraints": [], }, bases=("account.user",), ), migrations.CreateModel( name="SuperAdminUser", fields=[], options={ "verbose_name": "Super Admin User", "verbose_name_plural": "Super Admin Users", "proxy": True, "indexes": [], "constraints": [], }, bases=("account.user",), ), ]