refactor: Implementa arquitetura MVC limpa
- Separa modelos em entidades individuais - Cria camada de serviços para acesso a dados - Implementa controladores para lógica de negócio - Organiza rotas em blueprints por funcionalidade - Adiciona documentação de arquitetura no README - Cria script para preparação da estrutura 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
123
app.py.new
Normal file
123
app.py.new
Normal file
@@ -0,0 +1,123 @@
|
||||
from flask import Flask
|
||||
from flask_bootstrap import Bootstrap5
|
||||
from flask_mail import Mail
|
||||
from flask_login import LoginManager
|
||||
from flask_wtf.csrf import CSRFProtect
|
||||
from dotenv import load_dotenv
|
||||
import os
|
||||
import secrets
|
||||
import logging
|
||||
|
||||
# Importações de configurações
|
||||
from models.entities.base import Base, engine
|
||||
from routes.main import main_bp
|
||||
from routes.admin import admin_bp
|
||||
from routes.auth import auth_bp
|
||||
from routes.militante import militante_bp
|
||||
from routes.pagamento import pagamento_bp
|
||||
from routes.relatorio import relatorio_bp
|
||||
from routes.cota import cota_bp
|
||||
|
||||
# Configuração do logger
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
# Carregar variáveis de ambiente
|
||||
load_dotenv()
|
||||
|
||||
def create_app():
|
||||
"""Factory para criação da aplicação Flask"""
|
||||
app = Flask(__name__)
|
||||
|
||||
# Configuração secreta
|
||||
app.secret_key = os.getenv('SECRET_KEY', secrets.token_hex(16))
|
||||
|
||||
# Configuração de Bootstrap
|
||||
bootstrap = Bootstrap5(app)
|
||||
|
||||
# Registrar blueprints
|
||||
app.register_blueprint(main_bp)
|
||||
app.register_blueprint(admin_bp)
|
||||
app.register_blueprint(auth_bp)
|
||||
app.register_blueprint(militante_bp)
|
||||
app.register_blueprint(pagamento_bp)
|
||||
app.register_blueprint(relatorio_bp)
|
||||
app.register_blueprint(cota_bp)
|
||||
|
||||
# Configurar proteção CSRF
|
||||
csrf = CSRFProtect()
|
||||
csrf.init_app(app)
|
||||
app.config['WTF_CSRF_CHECK_DEFAULT'] = False
|
||||
app.config['WTF_CSRF_HEADERS'] = ['X-CSRFToken']
|
||||
|
||||
# Configurar Flask-Login
|
||||
login_manager = LoginManager()
|
||||
login_manager.init_app(app)
|
||||
login_manager.login_view = 'auth.login'
|
||||
|
||||
# Função para carregar usuário no login_manager
|
||||
from models.entities.usuario import Usuario
|
||||
from services.database_service import DatabaseService
|
||||
from sqlalchemy.orm import joinedload
|
||||
|
||||
@login_manager.user_loader
|
||||
def load_user(user_id):
|
||||
"""Carrega o usuário pelo ID"""
|
||||
db = DatabaseService.get_db_connection()
|
||||
try:
|
||||
user = db.query(Usuario).options(
|
||||
joinedload(Usuario.roles)
|
||||
).get(user_id)
|
||||
return user
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
# Adicionar filtros Jinja2
|
||||
@app.template_filter('bitwise_and')
|
||||
def bitwise_and(value1, value2):
|
||||
"""Filtro para operação bit a bit AND"""
|
||||
return value1 & value2
|
||||
|
||||
# Configurar Flask-Mail
|
||||
app.config['MAIL_SERVER'] = os.getenv('MAIL_SERVER', 'smtp.gmail.com')
|
||||
app.config['MAIL_PORT'] = int(os.getenv('MAIL_PORT', 587))
|
||||
app.config['MAIL_USE_TLS'] = os.getenv('MAIL_USE_TLS', 'True').lower() == 'true'
|
||||
app.config['MAIL_USERNAME'] = os.getenv('MAIL_USERNAME')
|
||||
app.config['MAIL_PASSWORD'] = os.getenv('MAIL_PASSWORD')
|
||||
app.config['MAIL_DEFAULT_SENDER'] = os.getenv('MAIL_DEFAULT_SENDER')
|
||||
|
||||
# Inicializar Mail
|
||||
mail = Mail(app)
|
||||
|
||||
return app
|
||||
|
||||
def init_system():
|
||||
"""Inicializa o sistema com banco de dados e usuários padrão"""
|
||||
from functions.database import init_database
|
||||
|
||||
# Inicializar banco de dados
|
||||
logger.info("Inicializando banco de dados...")
|
||||
init_database()
|
||||
|
||||
# Outros procedimentos de inicialização podem ser adicionados aqui
|
||||
|
||||
def main():
|
||||
"""Inicializa e retorna a aplicação Flask"""
|
||||
return create_app()
|
||||
|
||||
# Criar a aplicação
|
||||
app = main()
|
||||
|
||||
if __name__ == '__main__':
|
||||
import sys
|
||||
|
||||
# Verificar se é para inicializar o sistema
|
||||
if '--init' in sys.argv:
|
||||
init_system()
|
||||
else:
|
||||
# Executar a aplicação
|
||||
app.run(
|
||||
host='0.0.0.0',
|
||||
port=5000,
|
||||
debug=os.getenv('FLASK_ENV') == 'development'
|
||||
)
|
||||
Reference in New Issue
Block a user