import uuid import datetime import json from sqlalchemy import Column, String, DateTime, Text, Integer, Float, ForeignKey from sqlalchemy.orm import relationship from app.database import Base class MLModel(Base): __tablename__ = "ml_models" id = Column(String, primary_key=True, default=lambda: str(uuid.uuid4())) user_id = Column(String, ForeignKey("users.id"), nullable=False) name = Column(String, nullable=False) model_type = Column(String, nullable=False) # churn, lead feature_names_json = Column(Text, nullable=False) # JSON list of feature names encoders_json = Column(Text, nullable=False) # JSON dict of label encoders model_binary = Column(Text, nullable=False) # base64 encoded XGBoost model metrics_json = Column(Text, default="{}") # accuracy, roc_auc, etc. summary_json = Column(Text, default="{}") # n_rows, n_features, etc. n_rows = Column(Integer, default=0) n_features = Column(Integer, default=0) created_at = Column(DateTime, default=datetime.datetime.utcnow) user = relationship("User", back_populates="ml_models") def get_feature_names(self): return json.loads(self.feature_names_json) def get_metrics(self): return json.loads(self.metrics_json) def get_summary(self): return json.loads(self.summary_json)