111 lines
4.2 KiB
Python

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('/')