feat: implementacao inicial do sistema LeadRadar
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
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})>'
|
||||
Reference in New Issue
Block a user