111 lines
4.2 KiB
Python
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('/')
|