import uuid from datetime import datetime, timezone from app.extensions import db class Lead(db.Model): __tablename__ = 'leads' id = db.Column(db.String(36), primary_key=True, default=lambda: str(uuid.uuid4())) nome_empresa = db.Column(db.String(255), index=True, nullable=False) ramo_atividade = db.Column(db.String(100), index=True, nullable=False) cep_busca = db.Column(db.String(10), index=True, nullable=False) logradouro = db.Column(db.String(255), nullable=True) bairro = db.Column(db.String(100), nullable=True) cidade = db.Column(db.String(100), index=True, nullable=True) uf = db.Column(db.String(2), nullable=True) telefone = db.Column(db.String(50), nullable=True) telefone_sanitizado = db.Column(db.String(30), index=True, nullable=True) whatsapp_valido = db.Column(db.Boolean, nullable=True, default=True) website = db.Column(db.String(255), nullable=True) google_rating = db.Column(db.Float, default=0.0) total_avaliacoes = db.Column(db.Integer, default=0) google_maps_url = db.Column(db.Text, nullable=True) status_funil = db.Column(db.String(30), default='novo', nullable=False, index=True) tags = db.Column(db.JSON, default=list) notas = db.Column(db.Text, nullable=True) usuario_responsavel_id = db.Column(db.String(36), db.ForeignKey('users.id', ondelete='SET NULL'), nullable=True) criado_em = db.Column(db.DateTime, default=lambda: datetime.now(timezone.utc)) atualizado_em = db.Column(db.DateTime, default=lambda: datetime.now(timezone.utc), onupdate=lambda: datetime.now(timezone.utc)) # Relationships interacoes = db.relationship('LeadInteracao', backref='lead', cascade='all, delete-orphan', lazy='dynamic') def to_dict(self): return { 'id': self.id, 'nome_empresa': self.nome_empresa, 'ramo_atividade': self.ramo_atividade, 'cep_busca': self.cep_busca, 'logradouro': self.logradouro, 'bairro': self.bairro, 'cidade': self.cidade, 'uf': self.uf, 'telefone': self.telefone, 'telefone_sanitizado': self.telefone_sanitizado, 'whatsapp_valido': self.whatsapp_valido, 'website': self.website, 'google_rating': self.google_rating, 'total_avaliacoes': self.total_avaliacoes, 'google_maps_url': self.google_maps_url, 'status_funil': self.status_funil, 'tags': self.tags or [], 'notas': self.notas or '', 'usuario_responsavel_id': self.usuario_responsavel_id, 'usuario_responsavel_nome': self.usuario_responsavel.nome if self.usuario_responsavel else None, 'criado_em': self.criado_em.isoformat() if self.criado_em else None, 'atualizado_em': self.atualizado_em.isoformat() if self.atualizado_em else None } def __repr__(self): return f''