feat: implementacao inicial do sistema LeadRadar

This commit is contained in:
2026-08-26 17:14:35 -03:00
commit eb64f9a0f6
43 changed files with 2888 additions and 0 deletions
+75
View File
@@ -0,0 +1,75 @@
import os
import click
from flask import Flask, jsonify
from app.config import Config
from app.extensions import db, bcrypt, jwt, cors
def create_app(config_class=Config):
app = Flask(__name__)
app.config.from_object(config_class)
# Inicializar extensões
db.init_app(app)
bcrypt.init_app(app)
jwt.init_app(app)
cors.init_app(app, resources={r"/api/*": {"origins": "*"}})
# Registrar Blueprints
from app.routes.auth import auth_bp
from app.routes.users import users_bp
from app.routes.leads import leads_bp
from app.routes.webhooks import webhooks_bp
app.register_blueprint(auth_bp)
app.register_blueprint(users_bp)
app.register_blueprint(leads_bp)
app.register_blueprint(webhooks_bp)
# Tratamento global de erros JWT
@jwt.invalid_token_loader
def invalid_token_callback(error):
return jsonify({'error': 'Token JWT inválido ou corrompido.'}), 401
@jwt.unauthorized_loader
def missing_token_callback(error):
return jsonify({'error': 'Cabeçalho de autorização (Bearer token) ausente.'}), 401
@jwt.expired_token_loader
def expired_token_callback(jwt_header, jwt_payload):
return jsonify({'error': 'Token JWT expirado. Faça login novamente.'}), 401
# Rota de Healthcheck
@app.route('/health', methods=['GET'])
def healthcheck():
return jsonify({
'status': 'healthy',
'app': 'LeadRadar Core API',
'version': '1.0.0'
}), 200
# Comando CLI para popular banco com admin inicial se vazio
@app.cli.command('seed-db')
def seed_db_command():
"""Popula o banco de dados com usuário Admin inicial se não houver registros."""
from app.models.user import User
with app.app_context():
db.create_all()
if User.query.count() == 0:
admin = User(
nome='Administrador LeadRadar',
email='admin@leadradar.com',
role='admin',
ativo=True
)
admin.set_password('Admin@123456')
db.session.add(admin)
db.session.commit()
click.echo("Usuário Admin padrão criado: admin@leadradar.com / Admin@123456")
else:
click.echo("Banco de dados já contém usuários cadastrados.")
# Auto-criação de tabelas no startup (em ambiente dev/test)
with app.app_context():
db.create_all()
return app