Corin1998 commited on
Commit
c0794a3
·
verified ·
1 Parent(s): fdaf384

Create models.py

Browse files
Files changed (1) hide show
  1. app/models.py +73 -0
app/models.py ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from sqlalchemy import Column, Integer, String, Text, DateTime, Enum, ForeignKey, JSON, Boolean
2
+ from sqlalchemy.sql import func
3
+ from sqlalchemy.orm import relationship
4
+ from app.database import Base
5
+ import enum
6
+
7
+ class Tone(str , enum.Enum):
8
+ neutral = "netural"
9
+ formal = "formal"
10
+ friendly = "friendly"
11
+ investor = "investor"
12
+ pr_bold = "pr_bold"
13
+
14
+ class ContentType(str, enum.Enum):
15
+ press_release = "press_release"
16
+ ir_letter = "ir_letter"
17
+ investor_summary = "investor_summary"
18
+
19
+
20
+ class DraftStatus(str, enum.Enum):
21
+ draft = "draft"
22
+ pending = "pending"
23
+ approved = "approved"
24
+ scheduled = "scheduled"
25
+ sent = "sent"
26
+
27
+
28
+ class Draft(Base):
29
+ __tablename__ = "drafts"
30
+ id = Column(Integer, primary_key=True, index=True)
31
+ source_type = Column(String(20)) # pdf/url/text
32
+ source_ref = Column(Text) # URL or filename
33
+ raw_text = Column(Text)
34
+ content_type = Column(Enum(ContentType), nullable=False)
35
+ tone = Column(Enum(Tone), nullable=False, default=Tone.neutral)
36
+ title = Column(String(300))
37
+ body_md = Column(Text) # Markdown
38
+ status = Column(Enum(DraftStatus), nullable=False, default=DraftStatus.draft)
39
+ created_at = Column(DateTime(timezone=True), server_default=func.now())
40
+ updated_at = Column(DateTime(timezone=True), onupdate=func.now())
41
+
42
+
43
+ # AB test subjects (A/B)
44
+ subject_a = Column(String(300))
45
+ subject_b = Column(String(300))
46
+
47
+
48
+ # delivery options
49
+ deliver_email_list = Column(Text) # comma-separated emails
50
+ deliver_x = Column(Boolean, default=False)
51
+ deliver_note = Column(Boolean, default=False)
52
+
53
+
54
+ deliveries = relationship("Delivery", back_populates="draft")
55
+
56
+
57
+ class DeliveryChannel(str, enum.Enum):
58
+ email = "email"
59
+ x = "x"
60
+ note = "note"
61
+
62
+
63
+ class Delivery(Base):
64
+ __tablename__ = "deliveries"
65
+ id = Column(Integer, primary_key=True)
66
+ draft_id = Column(Integer, ForeignKey("drafts.id"))
67
+ channel = Column(Enum(DeliveryChannel), nullable=False)
68
+ payload = Column(JSON)
69
+ result = Column(JSON)
70
+ created_at = Column(DateTime(timezone=True), server_default=func.now())
71
+
72
+
73
+ draft = relationship("Draft", back_populates="deliveries")