AttendanceManager/reset_database.sh

98 lines
No EOL
3.1 KiB
Bash
Executable file

#!/bin/bash
# Cores para facilitar a leitura da saída
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # Sem Cor
# Função para checar se um comando foi bem-sucedido
check_success() {
if [ $? -ne 0 ]; then
echo -e "${RED}[ERRO] O passo '$1' falhou. Abortando o script.${NC}"
exit 1
fi
}
echo -e "${GREEN}==================================================${NC}"
echo -e "${GREEN}=== SCRIPT DE RESET DO BANCO DE DADOS FLASK ===${NC}"
echo -e "${GREEN}==================================================${NC}"
# --- VERIFICAÇÕES INICIAIS ---
if [ ! -f "manage.py" ]; then
echo -e "${RED}[ERRO] O arquivo 'manage.py' não foi encontrado.${NC}"
echo "Por favor, execute este script a partir da pasta raiz do seu projeto Flask."
exit 1
fi
if [ -z "$VIRTUAL_ENV" ]; then
echo -e "${YELLOW}[AVISO] Nenhum ambiente virtual (venv) parece estar ativado.${NC}"
read -p "Deseja continuar mesmo assim? (s/n): " choice
if [[ ! "$choice" =~ ^[sS]$ ]]; then
echo "Script abortado pelo usuário."
exit 0
fi
fi
echo -e "${YELLOW}[AVISO] Este script irá apagar TODAS as tabelas do seu banco de dados.${NC}"
read -p "Pressione [Enter] para continuar ou CTRL+C para cancelar..."
# --- PASSO 1: LIMPEZA ---
echo -e "\n${GREEN}--> PASSO 1: Limpando o ambiente local e o banco de dados...${NC}"
echo "Removendo diretório 'migrations' antigo..."
rm -rf migrations
check_success "Remover 'migrations'"
echo "Limpando tabelas do banco de dados (Método Robusto)..."
# Bloco de código Python que será executado para limpar o BD.
# Usar 'python -c' é mais confiável que tentar usar um shell interativo.
PYTHON_CLEAN_SCRIPT="
from app import create_app
from app.extensions import db
from sqlalchemy import text
import sys
app = create_app()
print('--- Entrando no contexto da aplicação Flask para limpar o BD ---')
with app.app_context():
try:
db.drop_all()
with db.engine.connect() as connection:
connection.execute(text('DROP TABLE IF EXISTS alembic_version;'))
connection.commit()
print('--- Banco de dados limpo com sucesso ---')
except Exception as e:
print(f'Ocorreu um erro durante a limpeza do BD: {e}', file=sys.stderr)
sys.exit(1)
"
# Executa o script de limpeza
python -c "$PYTHON_CLEAN_SCRIPT"
check_success "Limpeza do Banco de Dados"
# --- PASSO 2: CRIAR MIGRAÇÕES ---
echo -e "\n${GREEN}--> PASSO 2: Criando um novo histórico de migrações...${NC}"
echo "Executando: flask db init"
flask db init
check_success "'db init'"
echo "Executando: flask db migrate"
flask db migrate -m "Reset e criação inicial das tabelas"
check_success "'db migrate'"
echo "Executando: flask db upgrade"
flask db upgrade
check_success "'db upgrade'"
# --- FINALIZAÇÃO ---
echo -e "\n${GREEN}==================================================${NC}"
echo -e "${GREEN} PROCESSO CONCLUÍDO COM SUCESSO! ${NC}"
echo -e "${GREEN}==================================================${NC}"
echo "Seu banco de dados foi resetado e as tabelas foram criadas."
echo "Você já pode iniciar sua aplicação com 'python run.py'."
exit 0