Compare commits

...

2 Commits

4 changed files with 175 additions and 1 deletions

View File

@ -0,0 +1,77 @@
# Generated by Django 5.2.8 on 2025-12-01 16:22
import meetings.models
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('meetings', '0002_alter_appointmentrequest_jitsi_room_id'),
]
operations = [
migrations.AddField(
model_name='appointmentrequest',
name='jitsi_meeting_config',
field=models.JSONField(default=dict, help_text='Jitsi meeting configuration and settings'),
),
migrations.AddField(
model_name='appointmentrequest',
name='jitsi_meeting_created',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='appointmentrequest',
name='jitsi_meeting_data',
field=models.JSONField(default=dict, help_text='Additional meeting data (participants, duration, etc)'),
),
migrations.AddField(
model_name='appointmentrequest',
name='jitsi_meeting_password',
field=models.CharField(blank=True, max_length=100, null=True),
),
migrations.AddField(
model_name='appointmentrequest',
name='jitsi_moderator_token',
field=meetings.models.EncryptedTextField(blank=True, null=True),
),
migrations.AddField(
model_name='appointmentrequest',
name='jitsi_participant_token',
field=meetings.models.EncryptedTextField(blank=True, null=True),
),
migrations.AddField(
model_name='appointmentrequest',
name='jitsi_recording_url',
field=models.URLField(blank=True, help_text='URL to meeting recording', null=True),
),
migrations.AddField(
model_name='appointmentrequest',
name='meeting_duration_actual',
field=models.PositiveIntegerField(default=0, help_text='Actual meeting duration in minutes'),
),
migrations.AddField(
model_name='appointmentrequest',
name='meeting_ended_at',
field=models.DateTimeField(blank=True, null=True),
),
migrations.AddField(
model_name='appointmentrequest',
name='meeting_started_at',
field=models.DateTimeField(blank=True, 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),
),
migrations.AddIndex(
model_name='appointmentrequest',
index=models.Index(fields=['jitsi_meeting_created', 'scheduled_datetime'], name='meetings_ap_jitsi_m_f3c488_idx'),
),
migrations.AddIndex(
model_name='appointmentrequest',
index=models.Index(fields=['meeting_started_at'], name='meetings_ap_meeting_157142_idx'),
),
]

View File

@ -0,0 +1,66 @@
# Generated by Django 5.2.8 on 2025-12-01 18:30
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('meetings', '0003_appointmentrequest_jitsi_meeting_config_and_more'),
]
operations = [
migrations.RemoveIndex(
model_name='appointmentrequest',
name='meetings_ap_jitsi_m_f3c488_idx',
),
migrations.RemoveIndex(
model_name='appointmentrequest',
name='meetings_ap_meeting_157142_idx',
),
migrations.RemoveField(
model_name='appointmentrequest',
name='jitsi_meeting_config',
),
migrations.RemoveField(
model_name='appointmentrequest',
name='jitsi_meeting_created',
),
migrations.RemoveField(
model_name='appointmentrequest',
name='jitsi_meeting_data',
),
migrations.RemoveField(
model_name='appointmentrequest',
name='jitsi_meeting_password',
),
migrations.RemoveField(
model_name='appointmentrequest',
name='jitsi_moderator_token',
),
migrations.RemoveField(
model_name='appointmentrequest',
name='jitsi_participant_token',
),
migrations.RemoveField(
model_name='appointmentrequest',
name='jitsi_recording_url',
),
migrations.RemoveField(
model_name='appointmentrequest',
name='meeting_duration_actual',
),
migrations.RemoveField(
model_name='appointmentrequest',
name='meeting_ended_at',
),
migrations.RemoveField(
model_name='appointmentrequest',
name='meeting_started_at',
),
migrations.AlterField(
model_name='appointmentrequest',
name='jitsi_room_id',
field=models.CharField(blank=True, default=None, help_text='Jitsi room ID', max_length=100, null=True, unique=True),
),
]

View File

@ -3,7 +3,7 @@ from rest_framework_simplejwt.views import TokenRefreshView
from . import views
urlpatterns = [
path('contact/', views.ContactMessageView.as_view(), name='contact-message'),
path('contact/', views.contact_message, name='contact-message'),
path('register/', views.register_user, name='register'),

View File

@ -17,6 +17,8 @@ import logging
logger = logging.getLogger(__name__)
class ContactMessageView(APIView):
permission_classes = [AllowAny]
def post(self, request):
serializer = ContactMessageSerializer(data=request.data)
@ -44,7 +46,36 @@ class ContactMessageView(APIView):
'message': 'Please check your input and try again.',
'errors': serializer.errors
}, status=status.HTTP_400_BAD_REQUEST)
@api_view(['POST'])
@permission_classes([AllowAny])
def contact_message(request):
serializer = ContactMessageSerializer(data=request.data)
if serializer.is_valid():
try:
contact_message = serializer.save()
send_email_notifications(contact_message)
return Response({
'success': True,
'message': 'Thank you for your message. We will get back to you soon!',
'data': serializer.data
}, status=status.HTTP_201_CREATED)
except Exception as e:
logger.error(f"Error processing contact form: {str(e)}")
return Response({
'success': False,
'message': 'There was an error processing your request. Please try again later.'
}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
return Response({
'success': False,
'message': 'Please check your input and try again.',
'errors': serializer.errors
}, status=status.HTTP_400_BAD_REQUEST)