# Generated by Django 4.2.30 on 2026-04-26 15:18

from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone


class Migration(migrations.Migration):

    initial = True

    dependencies = [
        ('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')),
                ('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(db_index=True, max_length=80, unique=True)),
                ('password', models.CharField(db_column='password_hash', max_length=255)),
                ('role', models.CharField(default='user', max_length=20)),
                ('created_at', models.DateTimeField(default=django.utils.timezone.now)),
                ('invite_token', models.CharField(blank=True, db_index=True, max_length=64, null=True, unique=True)),
                ('invite_expires_at', models.DateTimeField(blank=True, null=True)),
                ('reset_token', models.CharField(blank=True, db_index=True, max_length=64, null=True, unique=True)),
                ('reset_expires_at', models.DateTimeField(blank=True, null=True)),
                ('is_active', models.BooleanField(default=True)),
                ('is_staff', models.BooleanField(default=False)),
            ],
            options={
                'db_table': 'users',
            },
        ),
        migrations.CreateModel(
            name='Permission',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('key', models.CharField(db_index=True, max_length=80, unique=True)),
                ('name', models.CharField(max_length=120)),
                ('category', models.CharField(max_length=40)),
            ],
            options={
                'db_table': 'permissions',
            },
        ),
        migrations.CreateModel(
            name='Role',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=60)),
                ('slug', models.CharField(blank=True, db_index=True, max_length=20, null=True, unique=True)),
                ('is_system', models.BooleanField(default=False)),
                ('created_at', models.DateTimeField(default=django.utils.timezone.now)),
            ],
            options={
                'db_table': 'roles',
            },
        ),
        migrations.CreateModel(
            name='UserPermission',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('permission', models.ForeignKey(db_column='permission_id', on_delete=django.db.models.deletion.CASCADE, to='accounts.permission')),
                ('user', models.ForeignKey(db_column='user_id', on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
            ],
            options={
                'db_table': 'user_permissions',
                'unique_together': {('user', 'permission')},
            },
        ),
        migrations.CreateModel(
            name='RolePermission',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('permission', models.ForeignKey(db_column='permission_id', on_delete=django.db.models.deletion.CASCADE, to='accounts.permission')),
                ('role', models.ForeignKey(db_column='role_id', on_delete=django.db.models.deletion.CASCADE, to='accounts.role')),
            ],
            options={
                'db_table': 'role_permissions',
                'unique_together': {('role', 'permission')},
            },
        ),
        migrations.AddField(
            model_name='role',
            name='permissions',
            field=models.ManyToManyField(related_name='roles', through='accounts.RolePermission', to='accounts.permission'),
        ),
        migrations.CreateModel(
            name='DashboardSession',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('token', models.CharField(db_index=True, max_length=64, unique=True)),
                ('expires_at', models.DateTimeField()),
                ('remember_me', models.BooleanField(default=False)),
                ('created_at', models.DateTimeField(default=django.utils.timezone.now)),
                ('otp_verified_at', models.DateTimeField(blank=True, null=True)),
                ('otp_code_hash', models.CharField(blank=True, max_length=255, null=True)),
                ('otp_expires_at', models.DateTimeField(blank=True, null=True)),
                ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
            ],
            options={
                'db_table': 'sessions',
            },
        ),
        migrations.AddField(
            model_name='user',
            name='direct_permissions',
            field=models.ManyToManyField(related_name='user_set', through='accounts.UserPermission', to='accounts.permission'),
        ),
        migrations.AddField(
            model_name='user',
            name='groups',
            field=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'),
        ),
        migrations.AddField(
            model_name='user',
            name='role_obj',
            field=models.ForeignKey(blank=True, db_column='role_id', null=True, on_delete=django.db.models.deletion.SET_NULL, to='accounts.role'),
        ),
        migrations.AddField(
            model_name='user',
            name='user_permissions',
            field=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'),
        ),
    ]
