feat: implementacao inicial do sistema LeadRadar
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user