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