From c1ee42074162972285bf11ec31340bb873e88f0c Mon Sep 17 00:00:00 2001 From: Kenio de Souza Date: Fri, 14 Nov 2025 15:59:14 -0300 Subject: [PATCH] =?UTF-8?q?feat():=20Cria=C3=A7=C3=A3o=20do=20endpoint=20S?= =?UTF-8?q?chema=20Database=20para=20verifica=C3=A7=C3=A3o=20de=20integrid?= =?UTF-8?q?ade=20de=20banco=20de=20dados?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../(client)/clientes/[id]/page.tsx | 50 +++++++++++++------ src/app/(protected)/page.tsx | 4 +- src/config/app.json | 2 +- .../data/Log/LogDatabaseSchemaData.ts | 31 ++++++++++++ .../hooks/Log/useLogDatabaseSchemaHook.ts | 23 +++++++++ .../Log/LogDatabaseSchemaInterface.ts | 37 ++++++++++++++ .../services/Log/LogDatabaseSchemaService.ts | 22 ++++++++ 7 files changed, 150 insertions(+), 19 deletions(-) create mode 100644 src/packages/administrativo/data/Log/LogDatabaseSchemaData.ts create mode 100644 src/packages/administrativo/hooks/Log/useLogDatabaseSchemaHook.ts create mode 100644 src/packages/administrativo/interfaces/Log/LogDatabaseSchemaInterface.ts create mode 100644 src/packages/administrativo/services/Log/LogDatabaseSchemaService.ts diff --git a/src/app/(protected)/administrativo/(client)/clientes/[id]/page.tsx b/src/app/(protected)/administrativo/(client)/clientes/[id]/page.tsx index 770a730..fc414bc 100644 --- a/src/app/(protected)/administrativo/(client)/clientes/[id]/page.tsx +++ b/src/app/(protected)/administrativo/(client)/clientes/[id]/page.tsx @@ -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); + + } } } } diff --git a/src/app/(protected)/page.tsx b/src/app/(protected)/page.tsx index 472a299..59d7ef9 100644 --- a/src/app/(protected)/page.tsx +++ b/src/app/(protected)/page.tsx @@ -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) diff --git a/src/config/app.json b/src/config/app.json index aa128cf..f7ce1a5 100644 --- a/src/config/app.json +++ b/src/config/app.json @@ -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", } \ No newline at end of file diff --git a/src/packages/administrativo/data/Log/LogDatabaseSchemaData.ts b/src/packages/administrativo/data/Log/LogDatabaseSchemaData.ts new file mode 100644 index 0000000..ec80202 --- /dev/null +++ b/src/packages/administrativo/data/Log/LogDatabaseSchemaData.ts @@ -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); diff --git a/src/packages/administrativo/hooks/Log/useLogDatabaseSchemaHook.ts b/src/packages/administrativo/hooks/Log/useLogDatabaseSchemaHook.ts new file mode 100644 index 0000000..73ab938 --- /dev/null +++ b/src/packages/administrativo/hooks/Log/useLogDatabaseSchemaHook.ts @@ -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(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 }; +}; diff --git a/src/packages/administrativo/interfaces/Log/LogDatabaseSchemaInterface.ts b/src/packages/administrativo/interfaces/Log/LogDatabaseSchemaInterface.ts new file mode 100644 index 0000000..55ff0d8 --- /dev/null +++ b/src/packages/administrativo/interfaces/Log/LogDatabaseSchemaInterface.ts @@ -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; +} diff --git a/src/packages/administrativo/services/Log/LogDatabaseSchemaService.ts b/src/packages/administrativo/services/Log/LogDatabaseSchemaService.ts new file mode 100644 index 0000000..7363499 --- /dev/null +++ b/src/packages/administrativo/services/Log/LogDatabaseSchemaService.ts @@ -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);