def get_event(version): """ Получить мероприятие и список билетов """ if version != "v1": return jsonify({ "message": "Некорректная версия", "event": {}, "tickets": [] }) try: event_id = parse_object_id(request.args.get("id")) except ErrorDataDB as error_db: return jsonify({ "message": error_db.message, "event": {}, "tickets": [] }) try: event = MONGO.db.event.find_one_or_404({"_id": event_id}) except NotFound: return jsonify({ "message": f"Нет такого события {event_id}", "event": {}, "tickets": [] }) tickets = list(MONGO.db.ticket.find({"event": event_id}, {"event": 0})) event["id"] = event.pop("_id") for ticket in tickets: ticket["id"] = ticket.pop("_id") return jsonify({"event": event, "tickets": tickets})
def check_relation_event_and_ticket(event_str_id, ticket_event_id): """ Проверить относится ли билет к событию. Если не относится, то выбросить исключение """ if ticket_event_id != parse_object_id(event_str_id): raise ErrorDataDB("Билет относится к событию {}, а не {}".format( str(ticket_event_id), event_str_id ))
def parse_data(data): """ Распарсить полученные данные """ try: check_request_dict(data) booking_id = parse_object_id(data["id"]) phone_number = parse_phone_number(data["phone_number"]) password_to_cancel = data["password_to_cancel"] except KeyError as key_error: raise ErrorDataDB("Отсутствует ключ {}".format(key_error)) return booking_id, phone_number, password_to_cancel
def parse_data(data): """ Разбиваем полученные данные """ try: check_request_dict(data) post_id = parse_object_id(data["id"]) login = data["login"] password = data["password"] except KeyError as key_error: raise ErrorDataDB("Отсутствует ключ {}".format(key_error)) return post_id, login, password
def add_doc_booking(data, book_tickets, session): """ Добавить бронь в коллекцию booking """ try: booking = { "password_to_cancel": generate_password_hash(data["password_to_cancel"]), "phone_number": parse_phone_number(data["phone_number"]), "event": parse_object_id(data["event"]), "tickets": book_tickets, "_id": counter_id.get_next_id("booking", session) } except KeyError as ex: raise ErrorDataDB("Отсутствует ключ {}".format(ex)) return MONGO.db.booking.insert_one(booking, session=session).inserted_id
def add_booking_in_tickets(data, session): """ Добавить информацию о бронировании в билеты """ book_tickets = list() try: for ticket_info_id in data["tickets"]: ticket_id = parse_object_id(ticket_info_id["id"]) before_updating_ticket = add_booking_in_ticket(ticket_id, session) check_relation_event_and_ticket( data["event"], before_updating_ticket["event"] ) del before_updating_ticket["event"] check_booking_in_ticket( ticket_id, before_updating_ticket["is_booked"] ) del before_updating_ticket["is_booked"] book_tickets.append(before_updating_ticket) except KeyError as key_error: raise ErrorDataDB("Отсутствует ключ {}".format(key_error)) except TypeError as type_error: raise ErrorDataDB("Неверный тип данных; {}".format(type_error)) return book_tickets
def get_bookings_list(version): """ Получить список броней """ if version != "v1": return jsonify({"message": "Некорректная версия", "bookings": []}) try: phone_number = parse_phone_number(request.args.get("phone_number")) except ErrorDataDB as error_db: return jsonify({"message": error_db.message, "bookings": []}) cursor = MONGO.db.booking.find( {"phone_number": phone_number}, { "phone_number": 0, "password_to_cancel": 0 } ) bookings = list(cursor) for booking in bookings: booking["id"] = booking.pop("_id") booking["event"] = get_event_info( parse_object_id(booking.pop("event"))) for ticket in booking["tickets"]: ticket["id"] = ticket.pop("_id") return jsonify({"bookings": bookings})