Files

46 lines
1.6 KiB
Python

from sqlalchemy import create_engine, Column, Integer, String, DateTime, ForeignKey, Boolean
from sqlalchemy.orm import declarative_base, relationship, sessionmaker
from datetime import datetime
Base = declarative_base()
class ProposalJob(Base):
__tablename__ = 'proposal_jobs'
id = Column(Integer, primary_key=True)
job_uuid = Column(String, unique=True, nullable=False) # Für die API-Links
customer_email = Column(String, nullable=False)
customer_name = Column(String, nullable=True)
customer_company = Column(String, nullable=True)
# Status-Tracking
status = Column(String, default='pending') # pending, approved, rejected, sent, failed
# Audit-Trail
created_at = Column(DateTime, default=datetime.now)
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now)
approved_at = Column(DateTime, nullable=True)
# Verknüpfung zu den vorgeschlagenen Slots
slots = relationship("ProposedSlot", back_populates="job")
class ProposedSlot(Base):
__tablename__ = 'proposed_slots'
id = Column(Integer, primary_key=True)
job_id = Column(Integer, ForeignKey('proposal_jobs.id'))
start_time = Column(DateTime, nullable=False)
end_time = Column(DateTime, nullable=False)
# Wir brauchen kein 'is_blocked' Flag mehr, da wir dynamisch zählen,
# wie oft 'start_time' in den letzten 24h verwendet wurde.
job = relationship("ProposalJob", back_populates="slots")
# DB Setup Helper
def init_db(db_path='sqlite:///trading_twins/trading_twins.db'):
engine = create_engine(db_path)
Base.metadata.create_all(engine)
return sessionmaker(bind=engine)