from sqlalchemy import create_engine, Column, Integer, String, DateTime from sqlalchemy.orm import declarative_base, sessionmaker import datetime import os DATABASE_URL = os.getenv("DATABASE_URL", "sqlite:////app/data/fotograf_jobs.db") engine = create_engine(DATABASE_URL, connect_args={"check_same_thread": False}) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) Base = declarative_base() class Job(Base): __tablename__ = "jobs" id = Column(String, primary_key=True, index=True) name = Column(String, index=True) url = Column(String) status = Column(String) date = Column(String) shooting_type = Column(String) account_type = Column(String, index=True) # 'kiga' or 'schule' last_updated = Column(DateTime, default=datetime.datetime.utcnow) class GmailToken(Base): __tablename__ = "gmail_tokens" id = Column(Integer, primary_key=True) token_json = Column(String) # Stores the full credentials JSON updated_at = Column(DateTime, default=datetime.datetime.utcnow, onupdate=datetime.datetime.utcnow) class DiscountCode(Base): __tablename__ = "discount_codes" id = Column(Integer, primary_key=True) code = Column(String, unique=True, index=True) is_used = Column(Integer, default=0) # 0 for false, 1 for true assigned_to_email = Column(String, nullable=True) used_at = Column(DateTime, nullable=True) class ReleaseParticipant(Base): __tablename__ = "release_participants" email = Column(String, primary_key=True) first_name = Column(String) last_updated = Column(DateTime, default=datetime.datetime.utcnow, onupdate=datetime.datetime.utcnow) Base.metadata.create_all(bind=engine) def get_db(): db = SessionLocal() try: yield db finally: db.close()