import requests from django.views import View from datetime import datetime from django.urls import reverse from django.utils import timezone from .forms import ZoomMeetingForm from rest_framework import viewsets from django.contrib import messages from .models import ZoomMeeting, Job, Candidate from django.utils.decorators import method_decorator from django.views.decorators.csrf import csrf_exempt from django.http import HttpResponseRedirect, JsonResponse from .serializers import JobSerializer, CandidateSerializer from django.shortcuts import get_object_or_404, render, redirect from django.views.generic import CreateView,UpdateView,DetailView,ListView from .utils import create_zoom_meeting, delete_zoom_meeting, list_zoom_meetings, get_zoom_meeting_details, update_zoom_meeting class JobViewSet(viewsets.ModelViewSet): queryset = Job.objects.all() serializer_class = JobSerializer class CandidateViewSet(viewsets.ModelViewSet): queryset = Candidate.objects.all() serializer_class = CandidateSerializer class ZoomMeetingCreateView(CreateView): model = ZoomMeeting template_name = 'meetings/create_meeting.html' form_class = ZoomMeetingForm success_url = '/' def form_valid(self, form): instance = form.save(commit=False) try: topic = instance.topic if instance.start_time < timezone.now(): messages.error(self.request, "Start time must be in the future.") return redirect('/create-meeting/', status=400) start_time = instance.start_time.isoformat() + "Z" duration = instance.duration result = create_zoom_meeting(topic, start_time, duration) if result["status"] == "success": instance.meeting_id = result['meeting_details']['meeting_id'] instance.join_url = result['meeting_details']['join_url'] instance.host_email = result['meeting_details']['host_email'] instance.zoom_gateway_response = result['zoom_gateway_response'] instance.save() messages.success(self.request, result["message"]) return redirect('/', status=201) else: messages.error(self.request, result["message"]) return redirect('/', status=400) except Exception as e: return redirect('/', status=500) class ZoomMeetingListView(ListView): model = ZoomMeeting template_name = 'meetings/list_meetings.html' context_object_name = 'meetings' class ZoomMeetingDetailsView(DetailView): model = ZoomMeeting template_name = 'meetings/meeting_details.html' context_object_name = 'meeting' class ZoomMeetingUpdateView(UpdateView): model = ZoomMeeting form_class = ZoomMeetingForm context_object_name = 'meeting' template_name = 'meetings/update_meeting.html' success_url = '/' def form_valid(self, form): instance = form.save(commit=False) updated_data = { 'topic': instance.topic, 'start_time': instance.start_time.isoformat() + "Z", 'duration': instance.duration } if instance.start_time < timezone.now(): messages.error(self.request, "Start time must be in the future.") return redirect(f'/update-meeting/{instance.pk}/', status=400) result = update_zoom_meeting(instance.meeting_id, updated_data) if result["status"] == "success": instance.save() messages.success(self.request, result["message"]) return redirect(reverse('meeting_details', kwargs={'pk': instance.pk})) else: messages.error(self.request, result["message"]) return redirect(reverse('meeting_details', kwargs={'pk': instance.pk})) def ZoomMeetingDeleteView(request, pk): meeting = get_object_or_404(ZoomMeeting, pk=pk) meeting_id = meeting.meeting_id try: result = delete_zoom_meeting(meeting_id) if result["status"] == "success": meeting.delete() messages.success(request, result["message"]) else: messages.error(request, result["message"]) return redirect('/') except Exception as e: messages.error(request, str(e)) return redirect('/')