113 lines
3.6 KiB
Python
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)
|