示例#1
0
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})
示例#2
0
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
        ))
示例#3
0
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
示例#5
0
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
示例#6
0
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
示例#7
0
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})