-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmodels.py
More file actions
73 lines (65 loc) · 2.87 KB
/
models.py
File metadata and controls
73 lines (65 loc) · 2.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import uuid
from sqlalchemy import Column, String, Text, ForeignKey, TIMESTAMP, text
from sqlalchemy.orm import relationship
from sqlalchemy.types import UUID as PG_UUID
from db_postgres import Base
from sqlalchemy.orm import relationship
class User(Base):
__tablename__ = "users"
id = Column(PG_UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
email = Column(String, nullable=False, unique=True, index=True)
password = Column(String, nullable=False) # Hashed password stored
first_name = Column(String, nullable=True)
last_name = Column(String, nullable=True)
created_at = Column(TIMESTAMP(timezone=True), nullable=False, server_default=text('now()'))
# Relationship with Agent (explicitly specify foreign_keys)
agents = relationship(
"Agent",
back_populates="user",
foreign_keys="[Agent.user_id]" # Specify the foreign key explicitly
)
class Agent(Base):
__tablename__ = "agents"
id = Column(PG_UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
name = Column(String, nullable=False)
api_name = Column(String, nullable=False)
description = Column(Text, nullable=True)
role = Column(Text, nullable=True)
organization = Column(Text, nullable=True)
topics = relationship(
"Topic",
back_populates="agent",
cascade="all, delete-orphan"
) # Cascade deletes to topics
user_type = Column(String, nullable=True)
# Foreign keys
user_id = Column(PG_UUID(as_uuid=True), ForeignKey("users.id"), nullable=False)
modified_by = Column(PG_UUID(as_uuid=True), ForeignKey("users.id"), nullable=True)
# Relationships
user = relationship(
"User",
back_populates="agents",
foreign_keys=[user_id] # Explicitly specify the foreign key
)
modifier = relationship(
"User",
foreign_keys=[modified_by], # Explicitly specify the foreign key
overlaps="agents" # Avoid overlap warnings
)
class Topic(Base):
__tablename__ = "topics"
id = Column(PG_UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
label = Column(String, nullable=False)
classification_description = Column(Text, nullable=True)
scope = Column(Text, nullable=True)
agent_id = Column(PG_UUID(as_uuid=True), ForeignKey("agents.id"), nullable=False)
agent = relationship("Agent", back_populates="topics")
topic_instructions = relationship(
"TopicInstruction", back_populates="topic", cascade="all, delete-orphan"
) # Cascade deletes to topic_instructions
class TopicInstruction(Base):
__tablename__ = "topic_instructions"
id = Column(PG_UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
topic_id = Column(PG_UUID(as_uuid=True), ForeignKey("topics.id"), nullable=False)
instruction = Column(Text, nullable=False)
topic = relationship("Topic", back_populates="topic_instructions")