PR_IRminiSaaS / app /models.py
Corin1998's picture
Update app/models.py
d2a463b verified
from sqlalchemy import Column, Integer, String, Text, DateTime, Enum, ForeignKey, JSON, Boolean
from sqlalchemy.sql import func
from sqlalchemy.orm import relationship
from app.database import Base
import enum
class Tone(str, enum.Enum):
neutral = "neutral"
formal = "formal"
friendly = "friendly"
investor = "investor"
pr_bold = "pr_bold"
class ContentType(str, enum.Enum):
press_release = "press_release"
ir_letter = "ir_letter"
investor_summary = "investor_summary"
class DraftStatus(str, enum.Enum):
draft = "draft"
pending = "pending"
approved = "approved"
scheduled = "scheduled"
sent = "sent"
class Draft(Base):
__tablename__ = "drafts"
id = Column(Integer, primary_key=True, index=True)
source_type = Column(String(20)) # pdf/url/text
source_ref = Column(Text) # URL or filename
raw_text = Column(Text)
content_type = Column(Enum(ContentType), nullable=False)
tone = Column(Enum(Tone), nullable=False, default=Tone.neutral)
title = Column(String(300))
body_md = Column(Text) # Markdown
status = Column(Enum(DraftStatus), nullable=False, default=DraftStatus.draft)
created_at = Column(DateTime(timezone=True), server_default=func.now())
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
# AB test subjects (A/B)
subject_a = Column(String(300))
subject_b = Column(String(300))
# delivery options
deliver_email_list = Column(Text) # comma-separated emails
deliver_x = Column(Boolean, default=False)
deliver_note = Column(Boolean, default=False)
deliveries = relationship("Delivery", back_populates="draft")
class DeliveryChannel(str, enum.Enum):
email = "email"
x = "x"
note = "note"
class Delivery(Base):
__tablename__ = "deliveries"
id = Column(Integer, primary_key=True)
draft_id = Column(Integer, ForeignKey("drafts.id"))
channel = Column(Enum(DeliveryChannel), nullable=False)
payload = Column(JSON)
result = Column(JSON)
created_at = Column(DateTime(timezone=True), server_default=func.now())
draft = relationship("Draft", back_populates="deliveries")