def list(self, request, *arg, **kwargs): """ Lists all bookings made by users""" data = Booking.objects.all().select_related() if request.user.is_admin: serializer = self.serializer_class(data, many=True) return success_response(serializer.data, 'All Bookings', status.HTTP_200_OK) else: owner = data.filter(user_id__pk=request.user.id) serializer = self.serializer_class(owner, many=True) return success_response(serializer.data, 'Your Bookings have been retrieved', status.HTTP_200_OK)
def create(self, request, *args, **kwargs): """ Creates Trip Bookings for all users who use this platform""" data = request.data try: trip_data = get_object_or_404(Trip, pk=data['trip_detail']) if trip_data: if trip_data.curr_bus_capacity == trip_data.bus_id.capacity: return failure_response({}, 'Bus capacity is full', status.HTTP_409_CONFLICT) else: data['user_id'] = request.user data['bus_id'] = trip_data.bus_id serializer = self.serializer_class( data=data, context={'user': request.user}) serializer.is_valid(raise_exception=True) trip_data.curr_bus_capacity += 1 trip_data.save() serializer.save() return success_response(serializer.data, 'Your Trip has been booked', status.HTTP_201_CREATED) else: return failure_response({}, 'trip id specified does not exist', status.HTTP_400_BAD_REQUEST) except IntegrityError: return failure_response({}, 'You have made this booking before', status.HTTP_409_CONFLICT)
def list(self, request, *args, **kwargs): "returns all available trips for both admin and regular users" startdate = date.today() enddate = startdate + timedelta(days=6) print(enddate) response = Trip.objects.filter(trip_date__range=[startdate, enddate]) serializer = self.serializer_class(response, many=True) return success_response(serializer.data, 'trips retrieved successfully', status.HTTP_200_OK)
def create(self, request, *args, **kwargs): """ Only admin Users can create a trip listing""" data = request.data serializer = self.serializer_class(data=data) serializer.is_valid(raise_exception=True) serializer.save() return success_response(serializer.data, TRIP_ADDED, status.HTTP_201_CREATED)
def update(self, request, pk): """ Allows Admin users to update a trip""" _data = request.data trip = get_object_or_404(Trip.objects.all(), pk=pk) # Here is that serialize, validate, save pattern we talked about # before. serializer = self.serializer_class( trip, data=_data, partial=True ) serializer.is_valid(raise_exception=True) serializer.save() return success_response(serializer.data, TRIP_UPDATED, status.HTTP_200_OK)
def post(self, request): """ Logs a User \n args: request(request object): Django request object returns: JSON user data and token """ user = request.data serializer = self.serializer_class(data=user) serializer.is_valid(raise_exception=True) return success_response(serializer.data, LOGIN_SUCCESS, status.HTTP_200_OK)
def post(self, request): """Creates a user Args: request (request object): Django request object Returns: JSON: Newly crearted user """ user = request.data email = request.data.get('email') user_exist = User.objects.filter(email=email) if (user_exist): response = {"error": "Email is already in use"} return Response(response, status=status.HTTP_409_CONFLICT) else: serializer = self.serializer_class(data=user) serializer.is_valid(raise_exception=True) serializer.save() return success_response(serializer.data, USER_CREATED, status.HTTP_201_CREATED)