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)