Files
leadradar/backend/app/models/lead.py
T

61 lines
2.9 KiB
Python

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'<Lead {self.nome_empresa} ({self.status_funil})>'