Source code for utils.db_helpers

import psycopg2
import os
import sys

[docs] def connection_db(): return psycopg2.connect( user="postgres", password="password", host="db", port="5432", database="2025_1_Minecraft" )
[docs] def execute_sql_file(conn, file_path): """Executa um arquivo SQL no banco de dados""" try: with open(file_path, 'r', encoding='utf-8') as file: sql_content = file.read() cursor = conn.cursor() cursor.execute(sql_content) conn.commit() cursor.close() print(f"Arquivo SQL executado com sucesso: {file_path}") return True except Exception as e: print(f"Erro ao executar arquivo SQL {file_path}: {str(e)}") return False
[docs] def check_database_connection(): """Verifica se é possível conectar ao banco de dados""" try: conn = connection_db() conn.close() print("Conexão com o banco de dados estabelecida") return True except Exception as e: print(f"Erro ao conectar com o banco de dados: {str(e)}") return False
[docs] def check_tables_exist(): """Verifica se as tabelas principais existem no banco usando repositórios""" try: # Importação local para evitar importação circular from ..repositories import BiomaRepositoryImpl, MapaRepositoryImpl, ChunkRepositoryImpl bioma_repo = BiomaRepositoryImpl() mapa_repo = MapaRepositoryImpl() chunk_repo = ChunkRepositoryImpl() # Verifica se as tabelas têm pelo menos um registro if not bioma_repo.find_all() or not mapa_repo.find_all() or not chunk_repo.find_all(): print("Algumas tabelas não têm registros") return False print("Todas as tabelas necessárias têm registros") return True except Exception as e: print(f"Erro ao verificar tabelas: {str(e)}") return False
[docs] def check_map_with_1000_chunks(): """Verifica se o mapa com 1000 chunks já foi criado""" try: conn = connection_db() cursor = conn.cursor() # Verifica se existem pelo menos 1000 chunks no mapa de dia cursor.execute(""" SELECT COUNT(*) FROM chunk WHERE id_mapa_nome = 'Mapa_Principal' AND id_mapa_turno = 'Dia' """) day_chunks = cursor.fetchone()[0] # Verifica se existem pelo menos 1000 chunks no mapa de noite cursor.execute(""" SELECT COUNT(*) FROM chunk WHERE id_mapa_nome = 'Mapa_Principal' AND id_mapa_turno = 'Noite' """) night_chunks = cursor.fetchone()[0] cursor.close() conn.close() if day_chunks >= 1000 and night_chunks >= 1000: print(f"Mapa com 1000 chunks já existe (Dia: {day_chunks}, Noite: {night_chunks})") return True else: print(f"Mapa com 1000 chunks não encontrado (Dia: {day_chunks}, Noite: {night_chunks})") return False except Exception as e: print(f"Erro ao verificar mapa com 1000 chunks: {str(e)}") return False
[docs] def check_data_seeded(): """Verifica se os dados iniciais foram inseridos""" try: conn = connection_db() cursor = conn.cursor() # Verificar se há dados nas tabelas principais cursor.execute("SELECT COUNT(*) FROM Jogador") player_count = cursor.fetchone()[0] cursor.execute("SELECT COUNT(*) FROM Chunk") chunk_count = cursor.fetchone()[0] cursor.execute("SELECT COUNT(*) FROM Bioma") bioma_count = cursor.fetchone()[0] cursor.execute("SELECT COUNT(*) FROM Mapa") mapa_count = cursor.fetchone()[0] cursor.close() conn.close() # Verificar se há pelo menos alguns dados if player_count == 0 and chunk_count == 0 and bioma_count == 0 and mapa_count == 0: print("Dados iniciais (seed) não encontrados") return False return True except Exception as e: print(f"Erro ao verificar dados iniciais: {str(e)}") return False
[docs] def initialize_database(): """Inicializa o banco de dados com dados básicos""" try: # Executar scripts SQL na ordem correta execute_sql_file("db/ddl.sql") execute_sql_file("db/trigger_SP.sql") execute_sql_file("db/dml.sql") execute_sql_file("db/dml_inst.sql") print("Executando script com mapa de 1000 chunks...") # Executar script adicional se existir try: execute_sql_file("db/create_user.sql") except FileNotFoundError: pass # Arquivo opcional print("Banco de dados inicializado com sucesso!") return True except Exception as e: print(f"Falha na inicialização do banco de dados.") return False
[docs] def setup_database(): """Configura o banco de dados antes da execução da aplicação""" print("Verificando configuração do banco de dados...") # Verificar conexão if not check_database_connection(): print("Erro: Não foi possível conectar ao banco de dados") return False # Verificar estrutura das tabelas if not check_tables_exist(): print("Inicializando estrutura e dados do banco...") if not initialize_database(): print("Falha na inicialização do banco de dados.") return False # Verificar dados iniciais if not check_data_seeded(): print("Inicializando dados básicos...") if not initialize_database(): print("Falha na inicialização dos dados.") return False print("Banco de dados já configurado e pronto para uso!") return True