# Generated by Django 4.2.13 on 2025-11-18 09:47 from django.conf import settings from django.db import migrations, models import django.db.models.deletion import django.utils.timezone import uuid SHORT_CERTIFICATE_CODE_LENGTH = 10 def generate_certificate_code(): return uuid.uuid4().hex[:SHORT_CERTIFICATE_CODE_LENGTH] class Migration(migrations.Migration): initial = True dependencies = [ ('events', '0012_alter_eventemaillog_kind'), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.CreateModel( name='Skill', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('created_at', models.DateTimeField(auto_now_add=True)), ('updated_at', models.DateTimeField(auto_now=True)), ('is_deleted', models.BooleanField(default=False)), ('deleted_at', models.DateTimeField(blank=True, null=True)), ('name', models.CharField(max_length=120, unique=True)), ('description', models.TextField(blank=True)), ], options={ 'ordering': ['name'], }, ), migrations.CreateModel( name='CertificateTemplate', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('created_at', models.DateTimeField(auto_now_add=True)), ('updated_at', models.DateTimeField(auto_now=True)), ('is_deleted', models.BooleanField(default=False)), ('deleted_at', models.DateTimeField(blank=True, null=True)), ('image', models.ImageField(upload_to='certificates/templates/')), ('event', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='certificate_template', to='events.event')), ('skills', models.ManyToManyField(blank=True, help_text='Skills covered by this event.', related_name='certificate_templates', to='certificates.skill')), ], options={ 'verbose_name': 'Certificate template', 'verbose_name_plural': 'Certificate templates', }, ), migrations.CreateModel( name='UserCertificate', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('created_at', models.DateTimeField(auto_now_add=True)), ('updated_at', models.DateTimeField(auto_now=True)), ('is_deleted', models.BooleanField(default=False)), ('deleted_at', models.DateTimeField(blank=True, null=True)), ('certificate_id', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)), ('code', models.CharField(default=generate_certificate_code, editable=False, max_length=10, unique=True)), ('title', models.CharField(max_length=255)), ('description', models.TextField(blank=True)), ('score', models.PositiveSmallIntegerField(default=0)), ('issued_at', models.DateTimeField(default=django.utils.timezone.now)), ('expires_at', models.DateTimeField(blank=True, null=True)), ('image', models.ImageField(blank=True, null=True, upload_to='certificates/generated/')), ('event', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='user_certificates', to='events.event')), ('skills', models.ManyToManyField(blank=True, help_text='Skills demonstrated on this certificate.', related_name='user_certificates', to='certificates.skill')), ('template', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='awarded_certificates', to='certificates.certificatetemplate')), ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='certificates', to=settings.AUTH_USER_MODEL)), ], options={ 'ordering': ['-issued_at'], 'indexes': [models.Index(fields=['user', 'event'], name='certificate_user_id_61901c_idx'), models.Index(fields=['event', 'score'], name='certificate_event_i_25b8ab_idx')], 'unique_together': {('user', 'event')}, }, ), ]