ThreadHouse / app /db /models.py
paudelapil's picture
Project do-over
65fa0c5
Raw
History Blame Contribute Delete
2.1 kB
from sqlalchemy import Column, String, Float, Integer, Boolean, DateTime, ForeignKey
from sqlalchemy.dialects.postgresql import UUID
from app.db.session import Base
import uuid
from datetime import datetime
class Job(Base):
__tablename__ = "jobs"
id = Column(UUID(as_uuid = True), primary_key = True, default = uuid.uuid4)
status = Column(String, default = "processing")
filename = Column(String)
row_count = Column(Integer)
customer_count = Column(Integer)
error_message = Column(String, nullable = True)
created_at = Column(DateTime, default = datetime.utcnow)
completed_at = Column(DateTime, nullable=True)
class CustomerProfile(Base):
__tablename__ = "customer_profiles"
id = Column(UUID(as_uuid = True), primary_key = True, default = uuid.uuid4)
job_id = Column(UUID(as_uuid = True), ForeignKey("jobs.id"))
customer_id = Column(String)
recency = Column(Float)
frequency = Column(Float)
monetary = Column(Float)
avg_order_value = Column(Float)
total_items = Column(Float)
distinct_products = Column(Float)
tenure_days = Column(Float)
avg_items_per_order = Column(Float)
r_score = Column(Integer)
f_score = Column(Integer)
m_score = Column(Integer)
segment = Column(String)
clv_12months = Column(Float, nullable = True)
clv_segment = Column(String, nullable = True)
prob_alive = Column(Float, nullable = True)
predicted_purchases_90d = Column(Float, nullable = True)
hvr_probability = Column(Float, nullable = True)
hvr_potential = Column(String, nullable = True)
anomaly_score = Column(Float)
is_anomaly = Column(Boolean)
anomaly_severity = Column(String)
anomaly_type = Column(String)
class Insight(Base):
__tablename__ = "insights"
id = Column(UUID(as_uuid = True), primary_key = True, default = uuid.uuid4)
job_id = Column(UUID(as_uuid = True), ForeignKey("jobs.id"))
category = Column(String)
title = Column(String)
body = Column(String)
priority = Column(Integer) # 1 = critical, 2 = high, 3 = medium