korabo/api/views/event.py
2025-03-28 21:45:27 -04:00

113 lines
3.6 KiB
Python

from rest_framework.views import APIView
from django.contrib.auth.models import User
from django.shortcuts import get_object_or_404
from api.serializers.event import EventSerializer
from common.build_response import build_response
from web.models import Event, EventDivision
class EventView(APIView):
def get(self, request, event_id):
try:
event = get_object_or_404(Event, pk=event_id)
except Exception:
return build_response(404)
try:
event_serializer = EventSerializer(event)
except Exception:
return build_response(422)
return build_response(data=event_serializer.data)
def post(self, request):
data = request.POST
try:
division = get_object_or_404(EventDivision, pk=data.get('division'))
except Exception:
return build_response(500, message="Unable to retrieve division info")
try:
user = User.objects.filter(email=data.get('created_by')).first()
except Exception:
return build_response(500, message="Could not find user!")
try:
new_event = Event(
name=data.get("name"),
description=data.get("description"),
division=division,
start_date=data.get('start_date'),
end_date=data.get('end_date'),
submit_by_date=data.get('submit_by_date'),
chosen_date=None,
created_by=user
)
new_event.save()
except Exception:
return build_response(500, message="Unable to create new event!")
try:
event_serializer = EventSerializer(new_event)
except Exception:
return build_response(422)
return build_response(200, data=event_serializer.data)
def put(self,request, event_id):
try:
event = get_object_or_404(Event, pk=event_id)
except Exception:
return build_response(404)
data = request.POST
try:
division = get_object_or_404(EventDivision, pk=data.get('division'))
except Exception:
return build_response(500, message="Unable to retrieve division info")
try:
event.name = data.get('name', event.name)
event.description = data.get('description', event.description)
event.division = None
event.start_date = data.get('start_date', event.start_date)
event.end_date = data.get('end_date', event.end_date)
event.submit_by_date = data.get('submit_by_date', event.submit_by_date)
event.chosen_date = data.get('chosen_date', event.chosen_date)
event.created_by = data.get('created_by', event.created_by)
event.save()
except Exception:
build_response(500, message='Unable to update event')
try:
event_serializer = EventSerializer(event)
except Exception:
return build_response(422)
return build_response(200, data=event_serializer.data)
def delete(self, request, event_id):
try:
event = get_object_or_404(Event, pk=event_id)
except Exception:
return build_response(404)
try:
event.active = False
event.save()
except Exception:
return build_response(500, message="Unable to deactivate event")
try:
event_serializer = EventSerializer(event)
except Exception:
return build_response(422)
return build_response(204, data=event_serializer)