# Generated by Django 5.2.18 on 2026-10-30 20:07 import django.db.models.deletion import django.db.models.functions.text import django.utils.timezone from django.conf import settings from django.db import migrations, models class Migration(migrations.Migration): initial = True dependencies = [ ] 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')), ('email', models.EmailField(max_length=254, unique=True, verbose_name='E-Mail')), ('display_name', models.CharField(max_length=80, verbose_name='Anzeigename')), ('role', models.CharField(choices=[('user', 'Nutzer'), ('admin', 'Admin')], default='user', max_length=10, verbose_name='Rolle')), ('is_active', models.BooleanField(default=True, verbose_name='Aktiv')), ('must_change_password', models.BooleanField(default=False)), ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='Registriert am')), ], options={ 'verbose_name': 'Nutzer', 'verbose_name_plural': 'Nutzer', 'ordering': ['display_name'], 'constraints': [models.UniqueConstraint(django.db.models.functions.text.Lower('email'), name='user_email_ci_unique')], }, ), migrations.CreateModel( name='Invitation', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('token_hash', models.CharField(editable=False, max_length=64, unique=True)), ('created_at', models.DateTimeField(auto_now_add=True)), ('expires_at', models.DateTimeField()), ('used_at', models.DateTimeField(blank=True, null=True)), ('revoked_at', models.DateTimeField(blank=True, null=True)), ('email', models.EmailField(blank=True, help_text='Wenn gesetzt, kann nur diese Adresse sich registrieren.', max_length=254, verbose_name='E-Mail (optional)')), ('role', models.CharField(choices=[('user', 'Nutzer'), ('admin', 'Admin')], default='user', max_length=10, verbose_name='Rolle')), ('note', models.CharField(blank=True, help_text='Nur für dich, z. B. für wen die Einladung ist.', max_length=120, verbose_name='Notiz')), ('created_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), ('used_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), ], options={ 'verbose_name': 'Einladung', 'verbose_name_plural': 'Einladungen', 'ordering': ['-created_at'], 'abstract': False, }, ), migrations.CreateModel( name='PasswordResetToken', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('token_hash', models.CharField(editable=False, max_length=64, unique=True)), ('created_at', models.DateTimeField(auto_now_add=True)), ('expires_at', models.DateTimeField()), ('used_at', models.DateTimeField(blank=True, null=True)), ('revoked_at', models.DateTimeField(blank=True, null=True)), ('created_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='reset_tokens', to=settings.AUTH_USER_MODEL)), ], options={ 'verbose_name': 'Passwort-Reset', 'verbose_name_plural': 'Passwort-Resets', 'ordering': ['-created_at'], 'abstract': False, }, ), ]