61 lines
1.9 KiB
Python
61 lines
1.9 KiB
Python
from sqlalchemy import create_engine, Column, Integer, String, Date, Boolean, ForeignKey, DateTime
|
|
from sqlalchemy.orm import declarative_base, relationship, sessionmaker
|
|
import os
|
|
|
|
Base = declarative_base()
|
|
|
|
class Customer(Base):
|
|
__tablename__ = 'customers'
|
|
id = Column(Integer, primary_key=True)
|
|
given_name = Column(String)
|
|
surname = Column(String)
|
|
name_prefix = Column(String)
|
|
email_address = Column(String)
|
|
phone = Column(String)
|
|
email_newsletter = Column(Boolean)
|
|
address_line = Column(String)
|
|
city_name = Column(String)
|
|
postal_code = Column(String)
|
|
country_code = Column(String)
|
|
gender = Column(String)
|
|
birth_date = Column(String)
|
|
language = Column(String)
|
|
reservations = relationship('Reservation', back_populates='customer')
|
|
|
|
class Reservation(Base):
|
|
__tablename__ = 'reservations'
|
|
id = Column(Integer, primary_key=True)
|
|
customer_id = Column(Integer, ForeignKey('customers.id'))
|
|
start_date = Column(Date)
|
|
end_date = Column(Date)
|
|
num_adults = Column(Integer)
|
|
num_children = Column(Integer)
|
|
children_ages = Column(String) # comma-separated
|
|
offer = Column(String)
|
|
utm_comment = Column(String)
|
|
created_at = Column(DateTime)
|
|
customer = relationship('Customer', back_populates='reservations')
|
|
|
|
class HashedCustomer(Base):
|
|
__tablename__ = 'hashed_customers'
|
|
id = Column(Integer, primary_key=True)
|
|
customer_id = Column(Integer)
|
|
hashed_email = Column(String)
|
|
hashed_phone = Column(String)
|
|
hashed_name = Column(String)
|
|
redacted_at = Column(DateTime)
|
|
|
|
|
|
def get_engine():
|
|
db_url = os.environ.get('DATABASE_URL')
|
|
if db_url:
|
|
return create_engine(db_url)
|
|
# Default to local sqlite
|
|
return create_engine('sqlite:///alpinebits.db')
|
|
|
|
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=get_engine())
|
|
|
|
def init_db():
|
|
engine = get_engine()
|
|
Base.metadata.create_all(bind=engine)
|