From 7d5d3217a0f1e5906cee42481e5c8d2d396a9d2a Mon Sep 17 00:00:00 2001 From: saani Date: Thu, 27 Nov 2025 14:56:37 +0000 Subject: [PATCH 1/2] fix: allow null values for Jitsi fields in AppointmentRequest Add `null=True` to `jitsi_meet_url` and `jitsi_room_id` fields in the AppointmentRequest model. This allows these optional fields to be NULL at the database level in addition to accepting blank values, which is the proper Django pattern for optional string-based fields. This change requires a database migration to be generated and applied. --- ...ointmentrequest_jitsi_meet_url_and_more.py | 23 +++++++++++++++++++ meetings/models.py | 4 ++-- 2 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 meetings/migrations/0002_alter_appointmentrequest_jitsi_meet_url_and_more.py diff --git a/meetings/migrations/0002_alter_appointmentrequest_jitsi_meet_url_and_more.py b/meetings/migrations/0002_alter_appointmentrequest_jitsi_meet_url_and_more.py new file mode 100644 index 0000000..2cbbc8c --- /dev/null +++ b/meetings/migrations/0002_alter_appointmentrequest_jitsi_meet_url_and_more.py @@ -0,0 +1,23 @@ +# Generated by Django 5.2.8 on 2025-11-27 14:55 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('meetings', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='appointmentrequest', + name='jitsi_meet_url', + field=models.URLField(blank=True, help_text='Jitsi Meet URL for the video session', null=True), + ), + migrations.AlterField( + model_name='appointmentrequest', + name='jitsi_room_id', + field=models.CharField(blank=True, help_text='Jitsi room ID', max_length=100, null=True, unique=True), + ), + ] diff --git a/meetings/models.py b/meetings/models.py index bb5950c..e351183 100644 --- a/meetings/models.py +++ b/meetings/models.py @@ -203,8 +203,8 @@ class AppointmentRequest(models.Model): ) rejection_reason = EncryptedTextField(blank=True) - jitsi_meet_url = models.URLField(blank=True, help_text="Jitsi Meet URL for the video session") - jitsi_room_id = models.CharField(max_length=100, unique=True, blank=True, help_text="Jitsi room ID") + jitsi_meet_url = models.URLField(blank=True, null=True, help_text="Jitsi Meet URL for the video session") + jitsi_room_id = models.CharField(max_length=100, unique=True, null=True, blank=True, help_text="Jitsi room ID") created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) -- 2.39.5 From 0e7e51dc7d14fe593023a043586df28d510e9951 Mon Sep 17 00:00:00 2001 From: saani Date: Thu, 27 Nov 2025 15:00:16 +0000 Subject: [PATCH 2/2] Deleting migrations --- meetings/migrations/0001_initial.py | 56 ------------------- ...ointmentrequest_jitsi_meet_url_and_more.py | 23 -------- 2 files changed, 79 deletions(-) delete mode 100644 meetings/migrations/0001_initial.py delete mode 100644 meetings/migrations/0002_alter_appointmentrequest_jitsi_meet_url_and_more.py diff --git a/meetings/migrations/0001_initial.py b/meetings/migrations/0001_initial.py deleted file mode 100644 index 23dbc8b..0000000 --- a/meetings/migrations/0001_initial.py +++ /dev/null @@ -1,56 +0,0 @@ -# Generated by Django 5.2.8 on 2025-11-27 14:43 - -import meetings.models -import uuid -from django.db import migrations, models - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='AdminWeeklyAvailability', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('availability_schedule', models.JSONField(default=dict, help_text='Dictionary with days as keys and lists of time slots as values')), - ('created_at', models.DateTimeField(auto_now_add=True)), - ('updated_at', models.DateTimeField(auto_now=True)), - ], - options={ - 'verbose_name': 'Admin Weekly Availability', - 'verbose_name_plural': 'Admin Weekly Availability', - }, - ), - migrations.CreateModel( - name='AppointmentRequest', - fields=[ - ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), - ('first_name', meetings.models.EncryptedCharField(max_length=255)), - ('last_name', meetings.models.EncryptedCharField(max_length=255)), - ('email', meetings.models.EncryptedEmailField(max_length=254)), - ('phone', meetings.models.EncryptedCharField(blank=True, max_length=255)), - ('reason', meetings.models.EncryptedTextField(blank=True)), - ('preferred_dates', models.JSONField(help_text='List of preferred dates (YYYY-MM-DD format)')), - ('preferred_time_slots', models.JSONField(help_text='List of preferred time slots (morning/afternoon/evening)')), - ('status', models.CharField(choices=[('pending_review', 'Pending Review'), ('scheduled', 'Scheduled'), ('rejected', 'Rejected'), ('completed', 'Completed'), ('cancelled', 'Cancelled')], default='pending_review', max_length=20)), - ('scheduled_datetime', models.DateTimeField(blank=True, null=True)), - ('scheduled_duration', models.PositiveIntegerField(default=60, help_text='Duration in minutes')), - ('rejection_reason', meetings.models.EncryptedTextField(blank=True)), - ('jitsi_meet_url', models.URLField(blank=True, help_text='Jitsi Meet URL for the video session')), - ('jitsi_room_id', models.CharField(blank=True, help_text='Jitsi room ID', max_length=100, unique=True)), - ('created_at', models.DateTimeField(auto_now_add=True)), - ('updated_at', models.DateTimeField(auto_now=True)), - ], - options={ - 'verbose_name': 'Appointment Request', - 'verbose_name_plural': 'Appointment Requests', - 'ordering': ['-created_at'], - 'indexes': [models.Index(fields=['status', 'scheduled_datetime'], name='meetings_ap_status_4e4e26_idx'), models.Index(fields=['email', 'created_at'], name='meetings_ap_email_b8ed9d_idx')], - }, - ), - ] diff --git a/meetings/migrations/0002_alter_appointmentrequest_jitsi_meet_url_and_more.py b/meetings/migrations/0002_alter_appointmentrequest_jitsi_meet_url_and_more.py deleted file mode 100644 index 2cbbc8c..0000000 --- a/meetings/migrations/0002_alter_appointmentrequest_jitsi_meet_url_and_more.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 5.2.8 on 2025-11-27 14:55 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('meetings', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='appointmentrequest', - name='jitsi_meet_url', - field=models.URLField(blank=True, help_text='Jitsi Meet URL for the video session', null=True), - ), - migrations.AlterField( - model_name='appointmentrequest', - name='jitsi_room_id', - field=models.CharField(blank=True, help_text='Jitsi room ID', max_length=100, null=True, unique=True), - ), - ] -- 2.39.5