system-prompts-and-models-o.../salesflow-saas/backend/app/models/lead.py
Sami Assiri 07557c4be9 feat(dealix): GTM polish, CRM/AI APIs, launch verification hardening
- Add integrations CRM and AI routing APIs; Salesforce OAuth refresh; lead CRM metadata
- Marketer hub, settings CRM UI, OS views; premium landing and strategy_summary differentiators
- Docs: API-MAP, product guide, competitive matrix, launch simulation, AGENT-MAP LLM routing
- Sync script: strategy legal + competitive matrix to public; pytest DB isolation (.pytest_dealix.sqlite)
- Tests: CRM status and AI routing smoke; check_go_live_gate UTF-8 stdout on Windows
- Alembic migrations for strategic deal links and lead company/sector/city

Made-with: Cursor
2026-04-13 05:08:39 +03:00

30 lines
1.5 KiB
Python

from sqlalchemy import Column, String, Integer, Text, DateTime, ForeignKey
from sqlalchemy.dialects.postgresql import UUID, JSONB
from sqlalchemy.orm import relationship
from datetime import datetime, timezone
from app.models.base import BaseModel
class Lead(BaseModel):
__tablename__ = "leads"
tenant_id = Column(UUID(as_uuid=True), ForeignKey("tenants.id"), nullable=False, index=True)
assigned_to = Column(UUID(as_uuid=True), ForeignKey("users.id"), nullable=True)
name = Column(String(255), nullable=False)
company_name = Column(String(255), nullable=True)
sector = Column(String(100), nullable=True)
city = Column(String(100), nullable=True)
phone = Column(String(20))
email = Column(String(255))
source = Column(String(100)) # whatsapp, website, referral, social, phone
status = Column(String(50), default="new") # new, contacted, qualified, proposal, won, lost
score = Column(Integer, default=0)
notes = Column(Text)
extra_metadata = Column(JSONB, default=dict) # industry-specific flexible data
updated_at = Column(DateTime(timezone=True), default=lambda: datetime.now(timezone.utc), onupdate=lambda: datetime.now(timezone.utc))
assigned_user = relationship("User", foreign_keys=[assigned_to])
activities = relationship("Activity", back_populates="lead", foreign_keys="[Activity.lead_id]")
messages = relationship("Message", back_populates="lead", foreign_keys="[Message.lead_id]")
deals = relationship("Deal", back_populates="lead", foreign_keys="[Deal.lead_id]")