def create_artist(self, request): message = Message() try: artist_data = request.data if artist_data.keys() < { "username", "password", "genre", "band_name", "role_num" }: raise InsufficientFieldsException( "Please provide all of the artist fields: username, password, genre, band_name, and role_num" ) if artist_data["role_num"] != 3: raise WrongAccountTypeException( "Wrong Role number provided for artist: role_num provided " + str(artist_data["role_num"])) artist = self.artist_service.create_artist(artist_data) serializer = ArtistSerializer(artist) message.add_payload("Successfully created an artist account", serializer.data) return Response(message.response) except BaseError as e: message.add_error(e) return Response(message.response, status=status.HTTP_400_BAD_REQUEST)
def create_concert(self, request): message = Message() try: concert_data = request.data print(request.user.customuser.role_num.role_num) if request.user.customuser.role_num.role_num != 1: raise WrongAccountTypeException("You're not a venue_owner") if concert_data.keys() < { "concert_name", "artist_id", "date_time", "default_price" }: raise InsufficientFieldsException( "Please provide all of the concert fields: concert_name, venue_id, artist_id, date_time" ) try: concert_data["artist_id"] = int(concert_data["artist_id"]) except ValueError: raise FieldTypeException("venue_id must be an int") venue = request.user.customuser.venue concert_data["venue_id"] = venue concert = self.concert_service.create_concert(concert_data) serializer = ConcertSerializer(concert) message.add_payload("Successfully created a concert", serializer.data) return Response(message.response) except BaseError as e: message.add_error(e) return Response(message.response, status=status.HTTP_400_BAD_REQUEST)
def confirm_ticket(self, request): message = Message() try: if request.data.keys() < {"credit_card", "ticket_id"}: raise InsufficientFieldsException( "Please provide credit card details and ticket_id") credit_card_details = request.data["credit_card"] ticket_id = request.data["ticket_id"] if credit_card_details["new"] and credit_card_details.keys() < { "credit_card_number", "security_code", "expiration_date", "card_nickname" }: raise InsufficientFieldsException( "Please provide all of the credit card details: credit_card_number, security_code, expiration_date, card_nickname" ) if not credit_card_details["new"] and credit_card_details.keys( ) < {"credit_card_id"}: raise InsufficientFieldsException("No credit_card_id provided") ticket = self.customer_service.confirm_ticket( request.user, ticket_id, credit_card_details) serializer = TicketSerializer(ticket) message.add_payload("Successfully confirmed ticket", serializer.data) return Response(message.response) except BaseError as e: message.add_error(e) return Response(message.response)
def create_venue(self, request): message = Message() try: user_data = request.data serializer_context = { 'request': request, } if user_data.keys() < { "username", "password", "role_num", "seat_rows", "seat_cols", "venue_name", "address", "location" }: raise InsufficientFieldsException( "Please provide all of the user fields: username, password, role_num, seat_rows, seat_cols, venue_name, address, location" ) if user_data["location"].keys() < {"lon", "lat"}: raise InsufficientFieldsException( "Please provide all of the location fields: lon, lat") if user_data["role_num"] != 1: raise WrongAccountTypeException( "Wrong Role number provided for customer: role_num provided " + str(user_data["role_num"])) user = self.venue_service.create_venue(user_data) serializer = VenueSerializer(user, context=serializer_context) message.add_payload("Successfully created a venue account", serializer.data) return Response(message.response) except BaseError as e: message.add_error(e) return Response(message.response, status=status.HTTP_400_BAD_REQUEST)
def create_customer(self, request): message = Message() try: user_data = request.data serializer_context = { 'request': request, } if user_data.keys() < {"username", "password", "role_num"}: raise InsufficientFieldsException( "Please provide all of the user fields: username, password, role_num" ) if user_data["role_num"] != 2: raise WrongAccountTypeException( "Wrong Role number provided for customer: role_num provided" + str(user_data["role_num"])) user = self.customer_service.create_customer(user_data) serializer = CustomUserSerializer(user, context=serializer_context) message.add_payload("Successfully created an account", serializer.data) return Response(message.response) except BaseError as e: message.add_error(e) return Response(message.response)
def get_user_type(self, request): message = Message() try: message.add_payload("Successfully Retrieved Role", request.user.customuser.role_num.role_num) return Response(message.response) except BaseError as e: message.add_error(e) return Response(message.response, status=status.HTTP_400_BAD_REQUEST)
def find_concerts(self, request): message = Message() try: concerts = self.concert_service.find_concerts(request.query_params) serializer = ConcertSerializer(concerts, many=True) message.add_payload("Successfully retrieved concerts", serializer.data) return Response(message.response) except BaseError as e: message.add_error(e) return Response(message.response)
def get_my_tickets(self, request): message = Message() try: if request.user.customuser.role_num.role_num != 2: raise WrongAccountTypeException( "Wrong account type, you should be a customer") tickets = self.customer_service.get_my_tickets( request.user.customuser) serializer = TicketSerializer(tickets, many=True) message.add_payload("Successfully retrieved tickets", serializer.data) return Response(message.response) except BaseError as e: message.add_error(e) return Response(message.response)
def get_my_concerts(self, request): message = Message() try: if request.user.customuser.role_num.role_num != 1: raise WrongAccountTypeException("You're not a venue_owner") concerts = self.concert_service.get_concerts_by_venue( request.user.customuser.venue) serializer = ConcertSerializer(concerts, many=True) message.add_payload("Successfully retrieved concerts", serializer.data) return Response(message.response) except BaseError as e: message.add_error(e) return Response(message.response, status=status.HTTP_400_BAD_REQUEST)
def reserve_ticket(self, request): message = Message() try: ticket_data = request.data if ticket_data.keys() < {"ticket_id"}: raise InsufficientFieldsException( "Please provide the ticket_id") ticket = self.customer_service.reserve_ticket( request.user, ticket_data["ticket_id"]) serializer = TicketSerializer(ticket) message.add_payload("Successfully reserved ticket", serializer.data) return Response(message.response) except BaseError as e: message.add_error(e) return Response(message.response)
def get_artist_by_id(self, request): message = Message() try: if "artist_id" not in request.query_params: InsufficientFieldsException("Please provide a artist_id") try: artist_id = int(request.query_params["artist_id"]) except ValueError: raise FieldTypeException("artist_id must be an int") artist = self.artist_service.get_artist_by_id(artist_id) serializer = ArtistSerializer(artist) message.add_payload("Successfully retrieved artist", serializer.data) return Response(message.response) except BaseError as e: message.add_error(e) return Response(message.response, status=status.HTTP_400_BAD_REQUEST)
def get_venue_by_id(self, request): message = Message() try: if "venue_id" not in request.query_params: InsufficientFieldsException("Please provide a venue_id") try: venue_id = int(request.query_params["venue_id"]) except ValueError: raise FieldTypeException("venue_id must be an int") venue = self.venue_service.get_venue_by_id(venue_id) serializer = VenueSerializer(venue) message.add_payload("Successfully retrieved venue", serializer.data) return Response(message.response) except BaseError as e: message.add_error(e) return Response(message.response, status=status.HTTP_400_BAD_REQUEST)
def get_tickets_by_concert_id(self, request): message = Message() try: if request.query_params.keys() < {"concert_id"}: raise InsufficientFieldsException( "Please provide a concert_id provided") concert_id = request.query_params["concert_id"] tickets = self.customer_service.get_tickets_by_concert_id( concert_id) serializer = AvailableTicketSerializer(tickets, many=True) message.add_payload("Successfully retrieved ticket", serializer.data) return Response(message.response) except BaseError as e: message.add_error(e) return Response(message.response)