fix(ui): replace all MySQL references with PostgreSQL

Update SyncView description, security note, mock progress logs,
dbConfig, loading text in PatientsView, UpdateDbView warning, and
metadata.json description. Rename syncGoogleSheetsToMysql →
syncGoogleSheetsToPg.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
VPS 4 Builder
2026-05-14 05:02:49 +02:00
parent 2a284f9e6e
commit c70b2cde66
5 changed files with 12 additions and 17 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
{ {
"name": "ScoreOdonto CRM", "name": "ScoreOdonto CRM",
"description": "Sistema de gerenciamento para clínica odontológica com integração híbrida (MySQL + Google Sheets) e design moderno.", "description": "Sistema de gerenciamento para clínica odontológica com integração híbrida (PostgreSQL + Google Sheets) e design moderno.",
"requestFramePermissions": [] "requestFramePermissions": []
} }
+6 -11
View File
@@ -32,12 +32,8 @@ const apiFetch = async (url: string, options: RequestInit = {}) => {
}; };
export const HybridBackend = { export const HybridBackend = {
// Configurações do Banco de Dados fornecidas
dbConfig: { dbConfig: {
host: 'localhost', database: 'scoreodonto'
user: 'root', // Exemplo
password: '',
database: 'sis_odonto'
}, },
// --- AUTH METHODS --- // --- AUTH METHODS ---
@@ -161,16 +157,15 @@ export const HybridBackend = {
" SCOREODONTO - ATUALIZADOR DE BANCO DE DADOS ", " SCOREODONTO - ATUALIZADOR DE BANCO DE DADOS ",
"--------------------------------------------------", "--------------------------------------------------",
"[INFO] VERIFICANDO AMBIENTE...", "[INFO] VERIFICANDO AMBIENTE...",
"[OK] AMBIENTE MYSQL DETECTADO.", "[OK] AMBIENTE POSTGRESQL DETECTADO.",
`[INFO] CONECTANDO DB: ${HybridBackend.dbConfig.database}...`, `[INFO] CONECTANDO DB: ${HybridBackend.dbConfig.database}...`,
`[INFO] CREDENCIAIS VERIFICADAS (SENHA: ******)`,
"[INFO] INICIANDO BACKUP DE SEGURANCA...", "[INFO] INICIANDO BACKUP DE SEGURANCA...",
`[OK] BACKUP SALVO EM: ./bkp_database/BKP_${new Date().toISOString().replace(/[:.]/g, '-')}.SQL`, `[OK] BACKUP SALVO EM: ./bkp_database/BKP_${new Date().toISOString().replace(/[:.]/g, '-')}.SQL`,
"[INFO] CONECTANDO API GOOGLE SHEETS...", "[INFO] CONECTANDO API GOOGLE SHEETS...",
"[INFO] LENDO PLANILHA: 'Dados Pacientes'...", "[INFO] LENDO PLANILHA: 'Dados Pacientes'...",
" > 1.240 LINHAS ENCONTRADAS.", " > 1.240 LINHAS ENCONTRADAS.",
" > VALIDANDO DADOS (CPF, TELEFONE)...", " > VALIDANDO DADOS (CPF, TELEFONE)...",
"[INFO] SINCRONIZANDO COM MYSQL (sis_odonto)...", "[INFO] SINCRONIZANDO COM POSTGRESQL (scoreodonto)...",
" > FORCANDO PADRAO 'UPPERCASE' EM TODOS OS CAMPOS TEXTUAIS...", " > FORCANDO PADRAO 'UPPERCASE' EM TODOS OS CAMPOS TEXTUAIS...",
" > ATUALIZANDO TABELA: PACIENTES...", " > ATUALIZANDO TABELA: PACIENTES...",
" > ATUALIZANDO TABELA: FINANCEIRO...", " > ATUALIZANDO TABELA: FINANCEIRO...",
@@ -190,16 +185,16 @@ export const HybridBackend = {
return true; return true;
}, },
syncGoogleSheetsToMysql: async (onProgress: (log: string) => void) => { syncGoogleSheetsToPg: async (onProgress: (log: string) => void) => {
onProgress("INICIANDO CONEXÃO COM GOOGLE SHEETS..."); onProgress("INICIANDO CONEXÃO COM GOOGLE SHEETS...");
await new Promise(r => setTimeout(r, 800)); await new Promise(r => setTimeout(r, 800));
onProgress("LENDO ABA 'DADOS PACIENTES'..."); onProgress("LENDO ABA 'DADOS PACIENTES'...");
await new Promise(r => setTimeout(r, 800)); await new Promise(r => setTimeout(r, 800));
onProgress(`CONECTANDO AO MYSQL (${HybridBackend.dbConfig.database})...`); onProgress(`CONECTANDO AO POSTGRESQL (${HybridBackend.dbConfig.database})...`);
await new Promise(r => setTimeout(r, 800)); await new Promise(r => setTimeout(r, 800));
onProgress("COMPARANDO REGISTROS (HASH CHECK)..."); onProgress("COMPARANDO REGISTROS (HASH CHECK)...");
await new Promise(r => setTimeout(r, 1000)); await new Promise(r => setTimeout(r, 1000));
onProgress("INSERINDO 2 NOVOS PACIENTES NO MYSQL..."); onProgress("INSERINDO 2 NOVOS PACIENTES NO POSTGRESQL...");
onProgress("ATUALIZANDO 4 AGENDAMENTOS..."); onProgress("ATUALIZANDO 4 AGENDAMENTOS...");
await new Promise(r => setTimeout(r, 500)); await new Promise(r => setTimeout(r, 500));
onProgress("SINCRONIZAÇÃO CONCLUÍDA COM SUCESSO!"); onProgress("SINCRONIZAÇÃO CONCLUÍDA COM SUCESSO!");
+3 -3
View File
@@ -858,7 +858,7 @@ export const SyncView: React.FC = () => {
setSyncing(true); setSyncing(true);
setLogs([]); setLogs([]);
try { try {
await HybridBackend.syncGoogleSheetsToMysql((log) => { await HybridBackend.syncGoogleSheetsToPg((log) => {
setLogs(prev => [...prev, `[${new Date().toLocaleTimeString()}] ${log}`]); setLogs(prev => [...prev, `[${new Date().toLocaleTimeString()}] ${log}`]);
}); });
toast.success("SINCRONIZAÇÃO CONCLUÍDA COM SUCESSO!"); toast.success("SINCRONIZAÇÃO CONCLUÍDA COM SUCESSO!");
@@ -871,7 +871,7 @@ export const SyncView: React.FC = () => {
return ( return (
<div className="max-w-4xl mx-auto space-y-6"> <div className="max-w-4xl mx-auto space-y-6">
<PageHeader title="IMPORTAÇÃO E SINCRONIZAÇÃO" description="GOOGLE SHEETS ➔ MYSQL (SIS_ODONTO)"> <PageHeader title="IMPORTAÇÃO E SINCRONIZAÇÃO" description="GOOGLE SHEETS ➔ POSTGRESQL">
<button <button
onClick={startSync} onClick={startSync}
disabled={syncing} disabled={syncing}
@@ -898,7 +898,7 @@ export const SyncView: React.FC = () => {
<div> <div>
<h4 className="text-sm font-bold text-yellow-800 uppercase">NOTA DE SEGURANÇA</h4> <h4 className="text-sm font-bold text-yellow-800 uppercase">NOTA DE SEGURANÇA</h4>
<p className="text-xs text-yellow-700 mt-1 uppercase font-medium"> <p className="text-xs text-yellow-700 mt-1 uppercase font-medium">
ESTA AÇÃO TODOS OS DADOS DA PLANILHA MESTRE E ATUALIZA O BANCO DE DADOS MYSQL LOCAL. ESTA AÇÃO TODOS OS DADOS DA PLANILHA MESTRE E ATUALIZA O BANCO DE DADOS POSTGRESQL.
O GOOGLE SHEETS PERMANECE COMO FONTE SEGURA DE BACKUP. CONFLITOS SERÃO RESOLVIDOS PRIORIZANDO A DATA DE MODIFICAÇÃO MAIS RECENTE. O GOOGLE SHEETS PERMANECE COMO FONTE SEGURA DE BACKUP. CONFLITOS SERÃO RESOLVIDOS PRIORIZANDO A DATA DE MODIFICAÇÃO MAIS RECENTE.
</p> </p>
</div> </div>
+1 -1
View File
@@ -463,7 +463,7 @@ export const PatientsView: React.FC = () => {
)} )}
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 overflow-y-auto pb-10"> <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 overflow-y-auto pb-10">
{isLoading && <div className="col-span-3 text-center p-10 text-gray-500 uppercase font-bold flex justify-center items-center gap-2"><Loader2 className="animate-spin" /> CARREGANDO DADOS DO MYSQL...</div>} {isLoading && <div className="col-span-3 text-center p-10 text-gray-500 uppercase font-bold flex justify-center items-center gap-2"><Loader2 className="animate-spin" /> CARREGANDO DADOS DO POSTGRESQL...</div>}
{error && <div className="col-span-3 text-center p-10 text-red-600 uppercase font-bold">ERRO AO CARREGAR: {error.message}</div>} {error && <div className="col-span-3 text-center p-10 text-red-600 uppercase font-bold">ERRO AO CARREGAR: {error.message}</div>}
{displayedPacientes && displayedPacientes.map(p => ( {displayedPacientes && displayedPacientes.map(p => (
+1 -1
View File
@@ -52,7 +52,7 @@ export const UpdateDbView: React.FC = () => {
<div> <div>
<h2 className="text-lg font-bold text-gray-800 uppercase">SCRIPT DE ATUALIZAÇÃO (SH/UPDATE_DB.SH)</h2> <h2 className="text-lg font-bold text-gray-800 uppercase">SCRIPT DE ATUALIZAÇÃO (SH/UPDATE_DB.SH)</h2>
<p className="text-gray-500 text-sm mt-2 max-w-md mx-auto uppercase"> <p className="text-gray-500 text-sm mt-2 max-w-md mx-auto uppercase">
ESTA AÇÃO IRÁ LER A PLANILHA "DADOS PACIENTES", GERAR UM BACKUP SQL E ATUALIZAR AS TABELAS DO MYSQL. ESTA AÇÃO IRÁ LER A PLANILHA "DADOS PACIENTES", GERAR UM BACKUP SQL E ATUALIZAR AS TABELAS DO POSTGRESQL.
</p> </p>
</div> </div>
<div className="bg-gray-800 text-green-400 p-4 rounded-lg font-mono text-sm text-left max-w-md mx-auto shadow-inner"> <div className="bg-gray-800 text-green-400 p-4 rounded-lg font-mono text-sm text-left max-w-md mx-auto shadow-inner">