You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

431 lines
16 KiB

# 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",),
),
]