# Generated by Django 5.2.17 on 2026-09-24 21:03 import django.core.validators import django.db.models.deletion from django.conf import settings from django.db import migrations, models import core.utils class Migration(migrations.Migration): initial = True dependencies = [migrations.swappable_dependency(settings.AUTH_USER_MODEL)] operations = [ migrations.CreateModel( name="Timetable", fields=[ ( "id", models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "semester", models.CharField( blank=True, default=core.utils.get_semester_code, validators=[ django.core.validators.RegexValidator("(A|P)\\d{2}") ], verbose_name="semester", ), ), ( "user", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name="user", ), ), ], options={"verbose_name": "timetable", "verbose_name_plural": "timetables"}, ), migrations.CreateModel( name="TimetableSlot", fields=[ ( "id", models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "weekday", models.SmallIntegerField( choices=[ (1, "Monday"), (2, "Tuesday"), (3, "Wednesday"), (4, "Thursday"), (5, "Friday"), (6, "Saturday"), (7, "Sunday"), ], verbose_name="weekday", ), ), ( "start_at", models.PositiveSmallIntegerField( validators=[django.core.validators.MaxValueValidator(95)], verbose_name="start at", ), ), ( "end_at", models.PositiveSmallIntegerField( validators=[django.core.validators.MaxValueValidator(95)], verbose_name="end at", ), ), ( "timetable", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="slots", to="timetable.timetable", verbose_name="timetable", ), ), ], options={ "verbose_name": "timetable slot", "verbose_name_plural": "timetable slots", "permissions": [("add_self_timetable", "Can add its own timetable")], }, ), migrations.AddConstraint( model_name="timetable", constraint=models.UniqueConstraint( fields=("user", "semester"), name="timetable_unique_user_semester" ), ), migrations.AddConstraint( model_name="timetableslot", constraint=models.CheckConstraint( condition=models.Q(("end_at__gt", models.F("start_at"))), name="timetable_slot_end_after_start", ), ), ]