feat(): Criação do endpoint Schema Database para verificação de integridade de banco de dados

This commit is contained in:
Kenio 2025-11-14 15:59:14 -03:00
parent 6c1371ccd9
commit c1ee420741
7 changed files with 150 additions and 19 deletions

View file

@ -13,6 +13,7 @@ import { convertMBtoGB } from '@/shared/utils/convertMBtoGB';
// Hooks responsaveis em consumir os endpoint's
import { useLogServerHook } from '@/packages/administrativo/hooks/Log/useLogServerHook';
import { useLogDatabaseHook } from '@/packages/administrativo/hooks/Log/useLogDatabaseHook';
import { useLogDatabaseSchemaHook } from '@/packages/administrativo/hooks/Log/useLogDatabaseSchemaHook';
import { useLogGedHook } from '@/packages/administrativo/hooks/Log/useLogGedHook';
import { useLogDiskHook } from '@/packages/administrativo/hooks/Log/useLogDiskHook';
import { useLogBackupHook } from '@/packages/administrativo/hooks/Log/useLogBackupHook';
@ -42,6 +43,7 @@ export default function ClientePage() {
// Hooks de logs (server e database)
const { logServer, fetchLogServer } = useLogServerHook();
const { logDatabase, fetchLogDatabase } = useLogDatabaseHook();
const { logDatabaseSchema, fetchLogDatabaseSchema } = useLogDatabaseSchemaHook();
const { logGed, fetchLogGed } = useLogGedHook();
const { logDisk, fetchLogDisk } = useLogDiskHook();
const { logBackup, fetchLogBackup } = useLogBackupHook();
@ -76,45 +78,61 @@ export default function ClientePage() {
console.error("Erro ao buscar log do banco:", error);
} finally {
// E SOMENTE após a conclusão da busca do banco
// (mesmo que dê erro ou traga 0 registros),
// executa a busca no GED
try {
await fetchLogGed(Number(id));
await fetchLogDatabaseSchema();
console.log(logDatabaseSchema)
} catch (error) {
console.error("Erro ao buscar log do GED:", error);
console.error("Erro ao buscar Schema do Banco de Dados:", error);
} finally {
// E SOMENTE após a conclusão da busca do GED
// E SOMENTE após a conclusão da busca do banco
// (mesmo que dê erro ou traga 0 registros),
// executa a busca no Disk
// executa a busca no GED
try {
await fetchLogDisk(Number(id));
await fetchLogGed(Number(id));
} catch (error) {
console.error("Erro ao buscar log do Disk:", error);
console.error("Erro ao buscar log do GED:", error);
} finally {
// E SOMENTE após a conclusão da busca do Disk
// E SOMENTE após a conclusão da busca do GED
// (mesmo que dê erro ou traga 0 registros),
// executa a busca no Backup
// executa a busca no Disk
try {
await fetchLogBackup(Number(id));
await fetchLogDisk(Number(id));
} catch (error) {
console.error("Erro ao buscar log do Backup:", error);
console.error("Erro ao buscar log do Disk:", error);
} finally {
// E SOMENTE após a conclusão da busca do Backup
// E SOMENTE após a conclusão da busca do Disk
// (mesmo que dê erro ou traga 0 registros),
// executa a busca no Warning
// executa a busca no Backup
try {
await fetchLogWarning(Number(id));
await fetchLogBackup(Number(id));
} catch (error) {
console.error("Erro ao buscar log do Warning:", error);
console.error("Erro ao buscar log do Backup:", error);
} finally {
// E SOMENTE após a conclusão da busca do Backup
// (mesmo que dê erro ou traga 0 registros),
// executa a busca no Warning
try {
await fetchLogWarning(Number(id));
} catch (error) {
console.error("Erro ao buscar log do Warning:", error);
}
}
}
}

View file

@ -8,9 +8,9 @@ export default function Page() {
useEffect(() => {
//REdireciona para a tela de clientes
//Redireciona para a tela de clientes
router.replace('/administrativo/clientes');
}, [router]);
return null; // Página em branco (não renderiza nada)

View file

@ -5,5 +5,5 @@
"prefix": "api/v1/",
"content_type": "application/json"
},
"api_debit": "https://admin.oriustecnologia.com/router.php"
"api_debit": "https://admin.oriustecnologia.com/router.php",
}

View file

@ -0,0 +1,31 @@
'use server'
// Indica que este módulo será executado no lado do servidor (DatabaseSchema Action do Next.js)
import { Methods } from '@/shared/services/api/enums/ApiMethodEnum';
// Importa o enumerador que contém os métodos HTTP padronizados (GET, POST, PUT, DELETE)
import API from '@/shared/services/api/Api';
// Importa a classe responsável por realizar requisições HTTP à API backend
import { withClientErrorHandler } from '@/withClientErrorHandler/withClientErrorHandler';
// Importa o wrapper que padroniza o tratamento de erros e respostas para o cliente
// Função principal responsável por buscar um usuário específico pelo seu ID
async function executeLogDatabaseSchemaData() {
// Cria uma nova instância da classe de comunicação com a API
const api = new API();
// Envia uma requisição GET ao endpoint que retorna os dados de um usuário específico
const response = await api.send({
'method': Methods.GET, // Define o método HTTP da requisição
'endpoint': `administrativo/firebird-schema/` // Monta dinamicamente o endpoint com o ID do usuário
});
// Retorna a resposta recebida da API (dados do usuário ou erro)
return response;
}
// Exporta a função encapsulada com o handler de erro
// Isso garante que exceções sejam tratadas de forma padronizada na camada superior
export const LogDatabaseSchemaData = withClientErrorHandler(executeLogDatabaseSchemaData);

View file

@ -0,0 +1,23 @@
'use client';
import { useState } from 'react';
import { LogDatabaseSchemaInterface } from '../../interfaces/Log/LogDatabaseSchemaInterface';
import { LogDatabaseSchemaService } from '../../services/Log/LogDatabaseSchemaService';
import { useResponse } from '@/shared/components/response/ResponseContext';
export const useLogDatabaseSchemaHook = () => {
const { setResponse } = useResponse();
const [logDatabaseSchema, setLog] = useState<LogDatabaseSchemaInterface | null>(null);
const fetchLogDatabaseSchema = async () => {
try {
const response = await LogDatabaseSchemaService();
setLog(response as LogDatabaseSchemaInterface);
setResponse(response);
} catch (error) {
console.error("Erro ao buscar informação do banco de dados:", error);
}
};
return { logDatabaseSchema, fetchLogDatabaseSchema };
};

View file

@ -0,0 +1,37 @@
/**
* Interface principal do retorno contendo metadados do banco:
* tabelas, views e procedures.
*/
export interface LogDatabaseSchemaInterface {
tables: TableMetadata[];
views: ViewMetadata[];
procedures: ProcedureMetadata[];
}
/**
* Estrutura de cada item dentro de "tables".
*/
export interface TableMetadata {
TABLE_NAME: string;
FIELD_NAME: string;
NULLABLE: string; // Vem como string ("NULL ")
FIELD_TYPE: string;
DEFAULT_VALUE: string | null;
DESCRIPTION: string | null;
}
/**
* Estrutura de cada item dentro de "views".
*/
export interface ViewMetadata {
VIEW_NAME: string;
VIEW_DEFINITION: string;
}
/**
* Estrutura de cada item dentro de "procedures".
*/
export interface ProcedureMetadata {
PROCEDURE_NAME: string;
SOURCE_CODE: string;
}

View file

@ -0,0 +1,22 @@
'use server'
// Indica que este arquivo é um "DatabaseSchema Action", executado no lado do servidor pelo Next.js
import { withClientErrorHandler } from "@/withClientErrorHandler/withClientErrorHandler";
// Importa o wrapper responsável por padronizar o tratamento de erros nas requisições do Loge
import { LogDatabaseSchemaData } from "../../data/Log/LogDatabaseSchemaData";
// Importa a função que acessa a camada de dados e retorna as informações do usuário a partir do ID
// Função assíncrona principal responsável por buscar um usuário pelo seu ID
async function executeLogDatabaseSchemaService() {
// Executa a função de busca de usuário, passando o ID recebido como parâmetro
const response = await LogDatabaseSchemaData();
// Retorna a resposta vinda da camada de dados (usuário encontrado ou erro)
return response;
}
// Exporta o serviço com o tratamento de erros encapsulado
// O wrapper "withClientErrorHandler" assegura respostas consistentes em caso de falhas
export const LogDatabaseSchemaService = withClientErrorHandler(executeLogDatabaseSchemaService);