示例#1
0
def book_table_at_restaurant(restaurant_identifier, table_number):
    restaurant = DatabaseController.get_restaurant(restaurant_identifier)
    table = DatabaseController.get_table_from_number_and_restaurant(
        table_number, restaurant_identifier)
    book_info = decoder.decode(request.data.decode("utf8"))

    startTime = datetime.strptime(book_info[Fields.BookingStartDatetime.value],
                                  DATEFORMAT)
    endTime = datetime.strptime(book_info[Fields.BookingEndDatetime.value],
                                DATEFORMAT)
    email = book_info[Fields.Email.value]

    booked, result, booking_id = DatabaseController.pre_book_table(
        startTime, endTime, email, table.id)

    if booked:
        MailController.send_confirmation_code(email, result, booking_id,
                                              startTime, endTime, table_number,
                                              restaurant.restaurant_name)
        return quote_fields({
            Fields.Success: True,
            Fields.BookingId: booking_id
        })
    else:
        return quote_fields({Fields.Success: False, Fields.Error: str(result)})
示例#2
0
def search_all_tables():
    start = datetime.strptime(request.args["startDatetime"], DATEFORMAT)
    end = datetime.strptime(request.args["endDatetime"], DATEFORMAT)
    seat_count = int(request.args["seatsCount"])

    return {
        Fields.Restaurants.value:
        DatabaseController.search_all_tables(start, end, seat_count).group_by(
            lambda t: t[0].restaurant_id).map(lambda l: FINQ(l).map(lambda t: (
                t[0].restaurant_id, zip_table(t))).self(extract_key)).
        map(lambda kl: (DatabaseController.get_restaurant(kl[0]), kl[1])).map(
            zip_restaurant).to_list()
    }
示例#3
0
def get_table_bookings(restaurant_identifier, table_number):
    table = DatabaseController.get_table_from_number_and_restaurant(
        table_number, restaurant_identifier)

    if table:
        return quote_fields({
            Fields.Success:
            True,
            Fields.Bookings:
            FINQ(
                table.bookings).map(lambda b: b.id).map(get_booking).to_list()
        })
    else:
        return quote_fields({
            Fields.Success: False,
            Fields.Error: Errors.NoTable
        })
示例#4
0
def confirm_booking(booking_id):
    if 'code' in request.args:
        err = DatabaseController.confirm_booking(booking_id,
                                                 int(request.args['code']))
        if err:
            return quote_fields({
                Fields.Success: False,
                Fields.Error: str(err)
            })
        else:
            return quote_fields({
                Fields.Success: True,
                Fields.Booking: get_booking(booking_id)
            })

    return quote_fields({
        Fields.Success: False,
        Fields.Error: Errors.NoConfirmationCode
    })
示例#5
0
def get_booking(booking_id):
    booking = DatabaseController.get_booking(booking_id)
    if booking:
        return quote_fields({
            Fields.Id:
            booking.id,
            Fields.BookingStartDatetime:
            booking.booking_start_datetime.strftime(DATEFORMAT),
            Fields.BookingEndDatetime:
            booking.booking_end_datetime.strftime(DATEFORMAT),
            Fields.TableId:
            booking.table_id,
            Fields.TableNumber:
            booking.table.table_number
        })
    return quote_fields({
        Fields.Id: booking_id,
        Fields.Error: Errors.NoBooking
    })
示例#6
0
def get_table_info(restaurant_identifier, table_number):
    table = DatabaseController.get_table_from_number_and_restaurant(
        table_number, restaurant_identifier)
    return get_table(table)
示例#7
0
def get_tables_at_restaurant(identifier):
    return FINQ(DatabaseController.get_restaurant(identifier).tables) \
        .map(get_table) \
        .to_dict(lambda d: d[Fields.Id.value], Identity)
示例#8
0
def get_tables():
    return FINQ(DatabaseController.get_tables()) \
        .map(get_table) \
        .to_dict(lambda d: d[Fields.Id.value], Identity)
示例#9
0
from finq import FINQ, Identity

from constants import Fields, Errors, quote_fields
from controllers import MailController
from finq_extensions import extract_key
from controllers import ImageController
from utils import datetime_segment_day_intersections

app = Flask(__name__)
app.config.from_object('config')
DATEFORMAT = '%H:%M %d.%m.%Y'
HOSTNAME = os.environ.get('HOSTNAME', '--no-hostname--')

decoder = JSONDecoder()

DatabaseController.load(app)

MailController.load(app, DATEFORMAT, HOSTNAME)


def read_sensible_data():
    with open('./sensible_data.json', 'rt') as sensible_data_stream:
        json = '\n'.join(sensible_data_stream.readlines())

    return decoder.decode(json)


def get_restaurant(restaurant):
    return quote_fields({
        Fields.Id: restaurant.id,
        Fields.WorkdayStart: str(restaurant.workday_start),