|
|
from sqlalchemy import Column, Integer, String, Text, Float, ForeignKey, DateTime
|
|
|
from sqlalchemy.orm import relationship
|
|
|
from datetime import datetime
|
|
|
from db import Base
|
|
|
|
|
|
|
|
|
class Product(Base):
|
|
|
__tablename__ = "products"
|
|
|
id = Column(Integer, primary_key=True)
|
|
|
name = Column(String(200), unique=True, index=True)
|
|
|
description = Column(Text, nullable=True)
|
|
|
notes = Column(Text, nullable=True)
|
|
|
price = Column(Float, nullable=True)
|
|
|
|
|
|
|
|
|
class CustomerProfile(Base):
|
|
|
__tablename__ = "customer_profiles"
|
|
|
id = Column(Integer, primary_key=True)
|
|
|
name = Column(String(200), unique=True, index=True)
|
|
|
attributes = Column(Text)
|
|
|
wcltv = Column(Float, default=0.0)
|
|
|
n = Column(Integer, default=0)
|
|
|
|
|
|
|
|
|
class Conversation(Base):
|
|
|
__tablename__ = "conversations"
|
|
|
id = Column(Integer, primary_key=True)
|
|
|
profile_name = Column(String(200), index=True)
|
|
|
started_at = Column(DateTime, default=datetime.utcnow)
|
|
|
messages = relationship("Message", back_populates="conversation", cascade="all, delete-orphan")
|
|
|
|
|
|
|
|
|
class Message(Base):
|
|
|
__tablename__ = "messages"
|
|
|
id = Column(Integer, primary_key=True)
|
|
|
conversation_id = Column(Integer, ForeignKey("conversations.id"))
|
|
|
sender = Column(String(32))
|
|
|
text = Column(Text)
|
|
|
ts = Column(DateTime, default=datetime.utcnow)
|
|
|
conversation = relationship("Conversation", back_populates="messages")
|
|
|
|