From 51dbdad1910a96ed463fe88e2eaf16c3c8c0a586 Mon Sep 17 00:00:00 2001 From: = <=> Date: Wed, 17 Sep 2025 16:51:09 -0300 Subject: [PATCH] [MVPTN-9] feat(CRUD): Implementando Cadastro de tipos de logradouro --- .../tipo-logradouro/page.tsx | 163 ++++++++++++++++++ .../GTBTipoLogradouroForm.tsx | 133 ++++++++++++++ .../GTBTipoLogradouroTable.tsx | 123 +++++++++++++ .../GTBTipoLogradouroIndexData.ts | 25 +++ .../GTBTipoLogradouroRemoveData.ts | 14 ++ .../GTBTipoLogradouroSaveData.ts | 17 ++ .../GTBTipoLogradouro/mockTipoLogradouro.ts | 98 +++++++++++ .../useGTBTipoLogradouroReadHook.ts | 27 +++ .../useGTBTipoLogradouroRemoveHook.ts | 19 ++ .../useGTBTipoLogradouroSaveHook.ts | 31 ++++ .../_interfaces/GTBTipoLogradouroInterface.ts | 8 + .../_schemas/GTBTipoLogradouroSchema.ts | 10 ++ .../GTBTipoLogradouroIndexService.ts | 12 ++ .../GTBTipoLogradouroRemoveService.ts | 10 ++ .../GTBTipoLogradouroSaveService.ts | 12 ++ src/components/app-sidebar.tsx | 4 + 16 files changed, 706 insertions(+) create mode 100644 src/app/(protected)/(cadastros)/cadastros/(g_tb_tipologradouro)/tipo-logradouro/page.tsx create mode 100644 src/app/(protected)/(cadastros)/cadastros/_components/g_tb_tipologradouro/GTBTipoLogradouroForm.tsx create mode 100644 src/app/(protected)/(cadastros)/cadastros/_components/g_tb_tipologradouro/GTBTipoLogradouroTable.tsx create mode 100644 src/app/(protected)/(cadastros)/cadastros/_data/GTBTipoLogradouro/GTBTipoLogradouroIndexData.ts create mode 100644 src/app/(protected)/(cadastros)/cadastros/_data/GTBTipoLogradouro/GTBTipoLogradouroRemoveData.ts create mode 100644 src/app/(protected)/(cadastros)/cadastros/_data/GTBTipoLogradouro/GTBTipoLogradouroSaveData.ts create mode 100644 src/app/(protected)/(cadastros)/cadastros/_data/GTBTipoLogradouro/mockTipoLogradouro.ts create mode 100644 src/app/(protected)/(cadastros)/cadastros/_hooks/g_tb_tipologradouro/useGTBTipoLogradouroReadHook.ts create mode 100644 src/app/(protected)/(cadastros)/cadastros/_hooks/g_tb_tipologradouro/useGTBTipoLogradouroRemoveHook.ts create mode 100644 src/app/(protected)/(cadastros)/cadastros/_hooks/g_tb_tipologradouro/useGTBTipoLogradouroSaveHook.ts create mode 100644 src/app/(protected)/(cadastros)/cadastros/_interfaces/GTBTipoLogradouroInterface.ts create mode 100644 src/app/(protected)/(cadastros)/cadastros/_schemas/GTBTipoLogradouroSchema.ts create mode 100644 src/app/(protected)/(cadastros)/cadastros/_services/g_tb_tipologradouro/GTBTipoLogradouroIndexService.ts create mode 100644 src/app/(protected)/(cadastros)/cadastros/_services/g_tb_tipologradouro/GTBTipoLogradouroRemoveService.ts create mode 100644 src/app/(protected)/(cadastros)/cadastros/_services/g_tb_tipologradouro/GTBTipoLogradouroSaveService.ts diff --git a/src/app/(protected)/(cadastros)/cadastros/(g_tb_tipologradouro)/tipo-logradouro/page.tsx b/src/app/(protected)/(cadastros)/cadastros/(g_tb_tipologradouro)/tipo-logradouro/page.tsx new file mode 100644 index 0000000..aced899 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/(g_tb_tipologradouro)/tipo-logradouro/page.tsx @@ -0,0 +1,163 @@ +'use client'; + +import { useEffect, useState, useCallback } from "react"; +import { Card, CardContent } from "@/components/ui/card"; +import { useConfirmDialog } from "@/app/_components/confirm_dialog/useConfirmDialog"; + +import Header from "@/app/_components/structure/Header"; +import ConfirmDialog from "@/app/_components/confirm_dialog/ConfirmDialog"; +import Loading from "@/app/_components/loading/loading"; +import GTBTipoLogradouroTable from "../../_components/g_tb_tipologradouro/GTBTipoLogradouroTable"; +import GTBTipoLogradouroForm from "../../_components/g_tb_tipologradouro/GTBTipoLogradouroForm"; + +import { useGTBTipoLogradouroReadHook } from "../../_hooks/g_tb_tipologradouro/useGTBTipoLogradouroReadHook"; +import { useGTBTipoLogradouroSaveHook } from "../../_hooks/g_tb_tipologradouro/useGTBTipoLogradouroSaveHook"; +import { useGTBTipoLogradouroRemoveHook } from "../../_hooks/g_tb_tipologradouro/useGTBTipoLogradouroRemoveHook"; + +import { GTBTipoLogradouroInterface } from "../../_interfaces/GTBTipoLogradouroInterface"; + +export default function TTBAndamentoServico() { + + // Hooks para leitura e salvamento + const { gTBTipoLogradouro, fetchGTBTipoLogradouro } = useGTBTipoLogradouroReadHook(); + const { saveGTBTipoLogradouro } = useGTBTipoLogradouroSaveHook(); + const { removeGTBTipoLogradouro } = useGTBTipoLogradouroRemoveHook(); + + // Estados + const [selectedTipoLogradouro, setTipoLogradouro] = useState(null); + const [isFormOpen, setIsFormOpen] = useState(false); + + // Estado para saber qual item será deletado + const [itemToDelete, setItemToDelete] = useState(null); + + /** + * Hook do modal de confirmação + */ + const { + isOpen: isConfirmOpen, + openDialog: openConfirmDialog, + handleConfirm, + handleCancel, + } = useConfirmDialog(); + + /** + * Abre o formulário no modo de edição ou criação + */ + const handleOpenForm = useCallback((data: GTBTipoLogradouroInterface | null) => { + setTipoLogradouro(data); + setIsFormOpen(true); + }, []); + + /** + * Fecha o formulário e limpa o andamento selecionado + */ + const handleCloseForm = useCallback(() => { + setTipoLogradouro(null); + setIsFormOpen(false); + }, []); + + /** + * Salva os dados do formulário + */ + const handleSave = useCallback(async (formData: GTBTipoLogradouroInterface) => { + + // Aguarda salvar o registro + await saveGTBTipoLogradouro(formData); + + // Atualiza a lista de dados + fetchGTBTipoLogradouro(); + + }, [saveGTBTipoLogradouro, fetchGTBTipoLogradouro]); + + /** + * Quando o usuário clica em "remover" na tabela + */ + const handleConfirmDelete = useCallback((item: GTBTipoLogradouroInterface) => { + + // Define o item atual para remoção + setItemToDelete(item); + + // Abre o modal de confirmação + openConfirmDialog(); + + }, [openConfirmDialog]); + + /** + * Executa a exclusão de fato quando o usuário confirma + */ + const handleDelete = useCallback(async () => { + + // Protege contra null + if (!itemToDelete) return; + + // Executa o Hook de remoção + await removeGTBTipoLogradouro(itemToDelete); + + // Atualiza a lista + await fetchGTBTipoLogradouro(); + + // Limpa o item selecionado + setItemToDelete(null); + + // Fecha o modal + handleCancel(); + + }, [itemToDelete, fetchGTBTipoLogradouro, handleCancel]); + + /** + * Busca inicial dos dados + */ + useEffect(() => { + fetchGTBTipoLogradouro(); + }, []); + + /** + * Tela de loading enquanto carrega os dados + */ + if (!gTBTipoLogradouro) { + return ; + } + + return ( +
+ {/* Cabeçalho */} +
{ handleOpenForm(null) }} + /> + + {/* Tabela de andamentos */} + + + + + + + {/* Modal de confirmação */} + + + {/* Formulário de criação/edição */} + +
+ ); +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_components/g_tb_tipologradouro/GTBTipoLogradouroForm.tsx b/src/app/(protected)/(cadastros)/cadastros/_components/g_tb_tipologradouro/GTBTipoLogradouroForm.tsx new file mode 100644 index 0000000..8cc9866 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_components/g_tb_tipologradouro/GTBTipoLogradouroForm.tsx @@ -0,0 +1,133 @@ +'use client'; + +import z from "zod"; +import { useEffect } from "react"; +import { useForm, Controller } from "react-hook-form"; +import { zodResolver } from "@hookform/resolvers/zod"; + +import { Button } from "@/components/ui/button"; +import { Checkbox } from "@/components/ui/checkbox"; +import { + Dialog, + DialogClose, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle +} from "@/components/ui/dialog"; +import { + Form, + FormControl, + FormField, + FormItem, + FormLabel, + FormMessage +} from "@/components/ui/form"; +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; + +import { GTBTipoLogradouroSchema } from "../../_schemas/GTBTipoLogradouroSchema"; +import { GTBTipoLogradouroInterface } from "../../_interfaces/GTBTipoLogradouroInterface"; + +type FormValues = z.infer; + +interface GTBTipoLogradouroFormProps { + isOpen: boolean; + data: FormValues | null; + onClose: (item: null, isFormStatus: boolean) => void; + onSave: (data: FormValues) => void; +} + +export default function GTBTipoLogradouroForm({ isOpen, data, onClose, onSave }: GTBTipoLogradouroFormProps) { + // Inicializa o react-hook-form com schema zod + const form = useForm({ + resolver: zodResolver(GTBTipoLogradouroSchema), + defaultValues: { + sistema_id: null, + tb_tipologradouro_id: 0, + situacao_id: null, + descricao: "", + situacao: "A", + onr_tipo_logradouro_id: 0 + }, + }); + + // Atualiza o formulário quando recebe dados para edição + useEffect(() => { + if (data) form.reset(data); + }, [data, form]); + + return ( + { + if (!open) onClose(null, false); + }} + > + + + + Tipo de Logradouro + + + Crie ou edite um tipo de logradouro + + + +
+ + + {/* Descrição */} + ( + + Descrição + + + + + + )} + /> + + {/* Situação */} + ( +
+ field.onChange(checked ? "A" : "I")} + /> + +
+ )} + /> + + {/* Rodapé do Dialog */} + + + + + + + + {/* Campos ocultos */} + + + + + + +
+
+ ); +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_components/g_tb_tipologradouro/GTBTipoLogradouroTable.tsx b/src/app/(protected)/(cadastros)/cadastros/_components/g_tb_tipologradouro/GTBTipoLogradouroTable.tsx new file mode 100644 index 0000000..acadbdc --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_components/g_tb_tipologradouro/GTBTipoLogradouroTable.tsx @@ -0,0 +1,123 @@ +'use client'; + +import { Button } from "@/components/ui/button"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuGroup, + DropdownMenuItem, + DropdownMenuSeparator, + DropdownMenuTrigger +} from "@/components/ui/dropdown-menu"; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow +} from "@/components/ui/table"; +import { EllipsisIcon, PencilIcon, Trash2Icon } from "lucide-react"; +import { GTBTipoLogradouroInterface } from "../../_interfaces/GTBTipoLogradouroInterface"; + +interface GTBTipoLogradouroTableProps { + data: GTBTipoLogradouroInterface[]; + onEdit: (item: GTBTipoLogradouroInterface, isEditingFormStatus: boolean) => void; + onDelete: (item: GTBTipoLogradouroInterface, isEditingFormStatus: boolean) => void; +} + +/** + * Renderiza o badge de situação + */ +function StatusBadge({ situacao }: { situacao: 'A' | 'I' }) { + const isActive = situacao === "A"; + + const baseClasses = + "text-xs font-medium px-2.5 py-0.5 rounded-sm me-2"; + + const activeClasses = + "bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-300"; + + const inactiveClasses = + "bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-300"; + + return ( + + {isActive ? "Ativo" : "Inativo"} + + ); +} + +export default function GTBTipoLogradouroTable({ + data, + onEdit, + onDelete +}: GTBTipoLogradouroTableProps) { + return ( + + + + # + Situação + Descrição + Ações + + + + + {data.map((item) => ( + + + {item.tb_tipologradouro_id} + + + + + + + {item.descricao} + + + + + + + + + + onEdit(item, true)} + > + + Editar + + + + + onDelete(item, true)} + > + + Remover + + + + + + + ))} + +
+ ); +} diff --git a/src/app/(protected)/(cadastros)/cadastros/_data/GTBTipoLogradouro/GTBTipoLogradouroIndexData.ts b/src/app/(protected)/(cadastros)/cadastros/_data/GTBTipoLogradouro/GTBTipoLogradouroIndexData.ts new file mode 100644 index 0000000..227b30b --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_data/GTBTipoLogradouro/GTBTipoLogradouroIndexData.ts @@ -0,0 +1,25 @@ +import API from "@/services/api/Api"; +import { Methods } from "@/services/api/enums/ApiMethodEnum"; +import TipoLogradouroMockDeDados from "./mockTipoLogradouro"; + +const useMock = true + +export default async function GTBTipoLogradouroIndexData() { + if (useMock) { + console.log(TipoLogradouroMockDeDados()) + return await TipoLogradouroMockDeDados(); + } + + const api = new API(); + try { + const dados = await api.send({ + method: Methods.GET, + endpoint: `administrativo/g_tb_tipologradouro/` + }); + return dados + } catch (error) { + console.log(error) + return error + } + +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_data/GTBTipoLogradouro/GTBTipoLogradouroRemoveData.ts b/src/app/(protected)/(cadastros)/cadastros/_data/GTBTipoLogradouro/GTBTipoLogradouroRemoveData.ts new file mode 100644 index 0000000..9a1799e --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_data/GTBTipoLogradouro/GTBTipoLogradouroRemoveData.ts @@ -0,0 +1,14 @@ +import API from "@/services/api/Api"; +import { GTBTipoLogradouroInterface } from "../../_interfaces/GTBTipoLogradouroInterface"; +import { Methods } from "@/services/api/enums/ApiMethodEnum"; + +export default async function GTBTipoLogradouroRemoveData(data: GTBTipoLogradouroInterface) { + + const api = new API(); + + return await api.send({ + method: Methods.DELETE, + endpoint: `administrativo/g_tb_tipologradouro/${data.tb_tipologradouro_id}` + }); + +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_data/GTBTipoLogradouro/GTBTipoLogradouroSaveData.ts b/src/app/(protected)/(cadastros)/cadastros/_data/GTBTipoLogradouro/GTBTipoLogradouroSaveData.ts new file mode 100644 index 0000000..5508890 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_data/GTBTipoLogradouro/GTBTipoLogradouroSaveData.ts @@ -0,0 +1,17 @@ +import API from "@/services/api/Api"; +import { GTBTipoLogradouroInterface } from "../../_interfaces/GTBTipoLogradouroInterface"; +import { Methods } from "@/services/api/enums/ApiMethodEnum"; + +export default async function GTBTipoLogradouroSaveData(data: GTBTipoLogradouroInterface) { + + const isUpdate = Boolean(data.tb_tipologradouro_id); + + const api = new API(); + + return await api.send({ + method: isUpdate ? Methods.PUT : Methods.POST, + endpoint: `administrativo/g_tb_tipologradouro/${data.tb_tipologradouro_id || ''}`, + body: data + }); + +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_data/GTBTipoLogradouro/mockTipoLogradouro.ts b/src/app/(protected)/(cadastros)/cadastros/_data/GTBTipoLogradouro/mockTipoLogradouro.ts new file mode 100644 index 0000000..d0ea84a --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_data/GTBTipoLogradouro/mockTipoLogradouro.ts @@ -0,0 +1,98 @@ +import { GTBTipoLogradouroInterface } from "../../_interfaces/GTBTipoLogradouroInterface"; + +export default async function TipoLogradouroMockDeDados(){ + return Promise.resolve({ + status: 200, + message: 'Dados localizados', + data: [ + { + sistema_id: null, + tb_tipologradouro_id: 1, + situacao_id: null, + descricao: "Rua", + situacao: "A", + onr_tipo_logradouro_id: 250 + }, + { + sistema_id: null, + tb_tipologradouro_id: 2, + situacao_id: null, + descricao: "Avenida", + situacao: "A", + onr_tipo_logradouro_id: 26 + }, + { + sistema_id: null, + tb_tipologradouro_id: 3, + situacao_id: null, + descricao: "Alameda", + situacao: "A", + onr_tipo_logradouro_id: 10 + }, + { + sistema_id: null, + tb_tipologradouro_id: 4, + situacao_id: null, + descricao: "Praça", + situacao: "A", + onr_tipo_logradouro_id: 215 + }, + { + sistema_id: null, + tb_tipologradouro_id: 5, + situacao_id: null, + descricao: "Via", + situacao: "A", + onr_tipo_logradouro_id: 294 + }, + { + sistema_id: null, + tb_tipologradouro_id: 6, + situacao_id: null, + descricao: "Viela", + situacao: "A", + onr_tipo_logradouro_id: 297 + }, + { + sistema_id: null, + tb_tipologradouro_id: 7, + situacao_id: null, + descricao: "Travessa", + situacao: "A", + onr_tipo_logradouro_id: 273 + }, + { + sistema_id: null, + tb_tipologradouro_id: 8, + situacao_id: null, + descricao: "Rodovia", + situacao: "A", + onr_tipo_logradouro_id: 247 + }, + { + sistema_id: null, + tb_tipologradouro_id: 9, + situacao_id: null, + descricao: "Sítios", + situacao: "A", + onr_tipo_logradouro_id: 263 + }, + { + sistema_id: null, + tb_tipologradouro_id: 10, + situacao_id: null, + descricao: "Córrego", + situacao: "A", + onr_tipo_logradouro_id: 86 + }, + { + sistema_id: null, + tb_tipologradouro_id: 11, + situacao_id: null, + descricao: "Estrada", + situacao: "A", + onr_tipo_logradouro_id: 117 + } + ] + }); +} diff --git a/src/app/(protected)/(cadastros)/cadastros/_hooks/g_tb_tipologradouro/useGTBTipoLogradouroReadHook.ts b/src/app/(protected)/(cadastros)/cadastros/_hooks/g_tb_tipologradouro/useGTBTipoLogradouroReadHook.ts new file mode 100644 index 0000000..a452e29 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_hooks/g_tb_tipologradouro/useGTBTipoLogradouroReadHook.ts @@ -0,0 +1,27 @@ +import { useResponse } from "@/app/_response/ResponseContext" +import { useState } from "react"; +import { GTBTipoLogradouroInterface } from "../../_interfaces/GTBTipoLogradouroInterface"; +import GTBTipoLogradouroIndexService from "../../_services/g_tb_tipologradouro/GTBTipoLogradouroIndexService"; + +export const useGTBTipoLogradouroReadHook = () => { + + const { setResponse } = useResponse(); + const [gTBTipoLogradouro, setGTBTipoLogradouro] = useState([]); + + const fetchGTBTipoLogradouro = async () => { + + try { + const response = await GTBTipoLogradouroIndexService(); + + setGTBTipoLogradouro(response.data); + + setResponse(response); + } catch (error) { + console.log(error) + } + + } + + return { gTBTipoLogradouro, fetchGTBTipoLogradouro } + +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_hooks/g_tb_tipologradouro/useGTBTipoLogradouroRemoveHook.ts b/src/app/(protected)/(cadastros)/cadastros/_hooks/g_tb_tipologradouro/useGTBTipoLogradouroRemoveHook.ts new file mode 100644 index 0000000..529ae61 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_hooks/g_tb_tipologradouro/useGTBTipoLogradouroRemoveHook.ts @@ -0,0 +1,19 @@ +import { useResponse } from "@/app/_response/ResponseContext" +import { GTBTipoLogradouroInterface } from "../../_interfaces/GTBTipoLogradouroInterface"; +import GTBTipoLogradouroRemoveService from "../../_services/g_tb_tipologradouro/GTBTipoLogradouroRemoveService"; + +export const useGTBTipoLogradouroRemoveHook = () => { + + const { setResponse } = useResponse(); + + const removeGTBTipoLogradouro = async (data: GTBTipoLogradouroInterface) => { + + const response = await GTBTipoLogradouroRemoveService(data); + + setResponse(response); + + } + + return { removeGTBTipoLogradouro } + +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_hooks/g_tb_tipologradouro/useGTBTipoLogradouroSaveHook.ts b/src/app/(protected)/(cadastros)/cadastros/_hooks/g_tb_tipologradouro/useGTBTipoLogradouroSaveHook.ts new file mode 100644 index 0000000..668966d --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_hooks/g_tb_tipologradouro/useGTBTipoLogradouroSaveHook.ts @@ -0,0 +1,31 @@ +import { useResponse } from "@/app/_response/ResponseContext" +import { useState } from "react"; +import { GTBTipoLogradouroInterface } from "../../_interfaces/GTBTipoLogradouroInterface"; +import GTBTipoLogradouroSaveService from "../../_services/g_tb_tipologradouro/GTBTipoLogradouroSaveService"; + +export const useGTBTipoLogradouroSaveHook = () => { + + const { setResponse } = useResponse(); + const [gTBTipoLogradouro, setGTBTipoLogradouro] = useState(null); + // controla se o formulário está aberto ou fechado + const [isOpen, setIsOpen] = useState(false); + + const saveGTBTipoLogradouro = async (data: GTBTipoLogradouroInterface) => { + + const response = await GTBTipoLogradouroSaveService(data); + + setGTBTipoLogradouro(response.data); + + setResponse(response); + + // Fecha o formulário automaticamente após salvar + setIsOpen(false); + + // Retorna os dados imediatamente + return response; + + } + + return { gTBTipoLogradouro, saveGTBTipoLogradouro } + +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_interfaces/GTBTipoLogradouroInterface.ts b/src/app/(protected)/(cadastros)/cadastros/_interfaces/GTBTipoLogradouroInterface.ts new file mode 100644 index 0000000..c7c3a80 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_interfaces/GTBTipoLogradouroInterface.ts @@ -0,0 +1,8 @@ +export interface GTBTipoLogradouroInterface { + sistema_id: number | null; + tb_tipologradouro_id: number; + situacao_id: number | null; + descricao: string; + situacao: 'A' | 'I'; + onr_tipo_logradouro_id: number; +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_schemas/GTBTipoLogradouroSchema.ts b/src/app/(protected)/(cadastros)/cadastros/_schemas/GTBTipoLogradouroSchema.ts new file mode 100644 index 0000000..92204bd --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_schemas/GTBTipoLogradouroSchema.ts @@ -0,0 +1,10 @@ +import { z } from 'zod'; + +export const GTBTipoLogradouroSchema = z.object({ + sistema_id: z.number().int().nullable(), + tb_tipologradouro_id: z.number().int(), + situacao_id: z.number().nullable(), + descricao: z.string(), + situacao: z.enum(['A', 'I']), + onr_tipo_logradouro_id: z.number(), +}); \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_services/g_tb_tipologradouro/GTBTipoLogradouroIndexService.ts b/src/app/(protected)/(cadastros)/cadastros/_services/g_tb_tipologradouro/GTBTipoLogradouroIndexService.ts new file mode 100644 index 0000000..1eb7666 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_services/g_tb_tipologradouro/GTBTipoLogradouroIndexService.ts @@ -0,0 +1,12 @@ +import GTBTipoLogradouroIndexData from "../../_data/GTBTipoLogradouro/GTBTipoLogradouroIndexData"; + +export default async function GTBTipoLogradouroIndexService() { + + try { + const response = await GTBTipoLogradouroIndexData(); + return response; + } catch (error) { + console.log(error) + return error + } +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_services/g_tb_tipologradouro/GTBTipoLogradouroRemoveService.ts b/src/app/(protected)/(cadastros)/cadastros/_services/g_tb_tipologradouro/GTBTipoLogradouroRemoveService.ts new file mode 100644 index 0000000..2fca163 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_services/g_tb_tipologradouro/GTBTipoLogradouroRemoveService.ts @@ -0,0 +1,10 @@ +import GTBTipoLogradouroRemoveData from "../../_data/GTBTipoLogradouro/GTBTipoLogradouroRemoveData"; +import { GTBTipoLogradouroInterface } from "../../_interfaces/GTBTipoLogradouroInterface"; + +export default async function GTBTipoLogradouroRemoveService(data: GTBTipoLogradouroInterface) { + + const response = await GTBTipoLogradouroRemoveData(data); + + return response; + +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_services/g_tb_tipologradouro/GTBTipoLogradouroSaveService.ts b/src/app/(protected)/(cadastros)/cadastros/_services/g_tb_tipologradouro/GTBTipoLogradouroSaveService.ts new file mode 100644 index 0000000..5f0542d --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_services/g_tb_tipologradouro/GTBTipoLogradouroSaveService.ts @@ -0,0 +1,12 @@ +import GTBTipoLogradouroSaveData from "../../_data/GTBTipoLogradouro/GTBTipoLogradouroSaveData"; +import { GTBTipoLogradouroInterface } from "../../_interfaces/GTBTipoLogradouroInterface"; + +export default async function GTBTipoLogradouroSaveService(data: GTBTipoLogradouroInterface) { + + const response = await GTBTipoLogradouroSaveData(data); + + console.log('GTBRegimeComunhaoSaveData', response) + + return response; + +} \ No newline at end of file diff --git a/src/components/app-sidebar.tsx b/src/components/app-sidebar.tsx index def5a8f..926c914 100644 --- a/src/components/app-sidebar.tsx +++ b/src/components/app-sidebar.tsx @@ -96,6 +96,10 @@ const data = { { title: "Regimes", url: "/cadastros/regimes/", + }, + { + title: "Tipos de Logradouros", + url: "/cadastros/tipo-logradouro" } ], },