diff --git a/src/app/(protected)/(administrativo)/administrativo/cartorio/page.tsx b/src/app/(protected)/(administrativo)/administrativo/cartorio/page.tsx new file mode 100644 index 0000000..082fc3f --- /dev/null +++ b/src/app/(protected)/(administrativo)/administrativo/cartorio/page.tsx @@ -0,0 +1,9 @@ +'use client'; + +import GCartorioIndex from "@/packages/administrativo/components/GCartorio/GCartorioIndex"; + +export default function GCartorioPage() { + return ( + < GCartorioIndex /> + ); +} diff --git a/src/app/(protected)/(administrativo)/administrativo/gramatica/page.tsx b/src/app/(protected)/(administrativo)/administrativo/gramatica/page.tsx new file mode 100644 index 0000000..990e90a --- /dev/null +++ b/src/app/(protected)/(administrativo)/administrativo/gramatica/page.tsx @@ -0,0 +1,9 @@ +import GGramaticaIndex from "@/packages/administrativo/components/GGramatica/GGramaticaIndex"; + +export default function GGramaticaPage() { + + return ( + + ); + +} \ No newline at end of file diff --git a/src/packages/administrativo/components/GCartorio/GCartorioColumns.tsx b/src/packages/administrativo/components/GCartorio/GCartorioColumns.tsx new file mode 100644 index 0000000..1b81c42 --- /dev/null +++ b/src/packages/administrativo/components/GCartorio/GCartorioColumns.tsx @@ -0,0 +1,78 @@ +import { ColumnDef } from '@tanstack/react-table'; +import { EllipsisIcon, PencilIcon, Trash2Icon } from 'lucide-react'; + +import { Button } from '@/components/ui/button'; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuGroup, + DropdownMenuItem, + DropdownMenuSeparator, + DropdownMenuTrigger, +} from '@/components/ui/dropdown-menu'; +import GetCapitalize from '@/shared/actions/text/GetCapitalize'; +import { SortableHeader } from '@/shared/components/dataTable/SortableHeader'; + +import GCartorioInterface from '../../interfaces/GCartorio/GCartorioInterface'; + +export default function GCartorioColumns( + onEdit: (item: GCartorioInterface, isEditingFormStatus: boolean) => void, + onDelete: (item: GCartorioInterface, isEditingFormStatus: boolean) => void, +): ColumnDef[] { + return [ + // ID + { + accessorKey: 'cartorio_id', + header: ({ column }) => SortableHeader('ID', column), + cell: ({ row }) => Number(row.getValue('cartorio_id')), + enableSorting: true, + }, + + // Descrição + { + accessorKey: 'razao_social', + header: ({ column }) => SortableHeader('Razão Social', column), + cell: ({ row }) => GetCapitalize(String(row.getValue('razao_social') || '')), + }, + + // Ações + { + id: 'actions', + header: 'Ações', + cell: ({ row }) => { + const natureza = row.original; + + return ( + + + + + + + + + + onEdit(natureza, true)}> + + Editar + + + + + onDelete(natureza, true)} + > + + Remover + + + + + ); + }, + enableSorting: false, + enableHiding: false, + }, + ]; +} diff --git a/src/packages/administrativo/components/GCartorio/GCartorioForm.tsx b/src/packages/administrativo/components/GCartorio/GCartorioForm.tsx new file mode 100644 index 0000000..cf56d1b --- /dev/null +++ b/src/packages/administrativo/components/GCartorio/GCartorioForm.tsx @@ -0,0 +1,415 @@ +'use client'; + +import React, { useEffect } from 'react'; + +import { Button } from '@/components/ui/button'; +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 { ResetFormIfData } from '@/shared/actions/form/ResetFormIfData'; +import LoadingButton from '@/shared/components/loadingButton/LoadingButton'; + +import { useGCartorioFormHook } from '../../hooks/GCartorio/useGCartorioFormHook'; +import { GCartorioFormInterface } from '../../interfaces/GCartorio/GCartorioFormInterface'; + +/** + * Formulário de cadastro/edição de Natureza + * Baseado nos campos da tabela G_NATUREZA + */ +export default function GCartorioForm({ + isOpen, + data, + onClose, + onSave, + buttonIsLoading, +}: GCartorioFormInterface) { + const form = useGCartorioFormHook({}); + + // Atualiza o formulário quando recebe dados para edição + useEffect(() => { + ResetFormIfData(form, data); + }, [data, form]); + + function onError(error: any) { + console.log('Erro no formulário:', error); + } + + return ( + { + if (!open) onClose(null, false); + }} + > + + + Formulário de Cartório + + Cadastro e edição de cartórios + + + + + + {/* Identificação */} + + ( + + Razão Social + + + + + + )} + /> + + + + ( + + Denominação da Serventia + + + + + + )} + /> + + + + ( + + CNPJ + + + + + + )} + /> + + + + ( + + CNS + + + + + + )} + /> + + + + ( + + SEQ + + + + + + )} + /> + + + {/* Localização */} + + ( + + Endereço + + + + + + )} + /> + + + + ( + + Número + + + + + + )} + /> + + + + ( + + Bairro + + + + + + )} + /> + + + + ( + + Município + + + + + + )} + /> + + + + ( + + UF + + + + + + )} + /> + + + + ( + + CEP + + + + + + )} + /> + + + {/* Contatos */} + + ( + + Telefone + + + + + + )} + /> + + + + ( + + Fax + + + + + + )} + /> + + + + ( + + Email + + + + + + )} + /> + + + + ( + + Site + + + + + + )} + /> + + + {/* Titular */} + + ( + + Nome do Titular + + + + + + )} + /> + + + + ( + + CPF do Titular + + + + + + )} + /> + + + {/* Substituto */} + + ( + + Nome do Substituto + + + + + + )} + /> + + + + ( + + CPF do Substituto + + + + + + )} + /> + + + + ( + + Email do Substituto + + + + + + )} + /> + + + + {/* Rodapé */} + + + + Cancelar + + + + + + + + + + ); +} diff --git a/src/packages/administrativo/components/GCartorio/GCartorioIndex.tsx b/src/packages/administrativo/components/GCartorio/GCartorioIndex.tsx new file mode 100644 index 0000000..6bb6b59 --- /dev/null +++ b/src/packages/administrativo/components/GCartorio/GCartorioIndex.tsx @@ -0,0 +1,161 @@ +'use client'; + +import { useEffect, useState, useCallback } from 'react'; + + +import { useGCartorioDeleteHook } from '@/packages/administrativo/hooks/GCartorio/useGCartorioDeleteHook'; +import { useGCartorioIndexHook } from '@/packages/administrativo/hooks/GCartorio/useGCartorioIndexHook'; +import { useGCartorioSaveHook } from '@/packages/administrativo/hooks/GCartorio/useGCartorioSaveHook'; +import GCartorioInterface from '@/packages/administrativo/interfaces/GCartorio/GCartorioInterface'; +import ConfirmDialog from '@/shared/components/confirmDialog/ConfirmDialog'; +import { useConfirmDialog } from '@/shared/components/confirmDialog/useConfirmDialog'; +import Loading from '@/shared/components/loading/loading'; +import Header from '@/shared/components/structure/Header'; + +import GCartorioForm from './GCartorioForm'; +import GCartorioTable from './GCartorioTable'; + +export default function GCartorioIndex() { + + // Controle de estado do botão + const [buttonIsLoading, setButtonIsLoading] = useState(false); + + // Hooks para leitura e salvamento + const { gGramatica, indexGCartorio } = useGCartorioIndexHook(); + const { saveGCartorio } = useGCartorioSaveHook(); + const { deleteGCartorio } = useGCartorioDeleteHook(); + + // Estados + const [selectedData, setSelectedData] = 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, handleCancel } = useConfirmDialog(); + + /** + * Abre o formulário no modo de edição ou criação + */ + const handleOpenForm = useCallback((data: GCartorioInterface | null) => { + setSelectedData(data); + setIsFormOpen(true); + }, []); + + /** + * Fecha o formulário e limpa o andamento selecionado + */ + const handleCloseForm = useCallback(() => { + setSelectedData(null); + setIsFormOpen(false); + }, []); + + /** + * Salva os dados do formulário + */ + const handleSave = useCallback( + async (formData: GCartorioInterface) => { + // Coloca o botão em estado de loading + setButtonIsLoading(true); + + // Aguarda salvar o registro + await saveGCartorio(formData); + + // Remove o botão em estado de loading + setButtonIsLoading(false); + + // Atualiza a lista de dados + indexGCartorio(); + }, + [saveGCartorio, indexGCartorio, handleCloseForm], + ); + + /** + * Quando o usuário clica em "remover" na tabela + */ + const handleConfirmDelete = useCallback( + (item: GCartorioInterface) => { + // 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 deleteGCartorio(itemToDelete); + + // Atualiza a lista + await indexGCartorio(); + + // Limpa o item selecionado + setItemToDelete(null); + + // Fecha o modal + handleCancel(); + }, [itemToDelete, indexGCartorio, handleCancel]); + + /** + * Busca inicial dos dados + */ + useEffect(() => { + indexGCartorio(); + }, []); + + /** + * Tela de loading enquanto carrega os dados + */ + if (gGramatica?.length == 0) { + return ; + } + + return ( + + {/* Cabeçalho */} + { + handleOpenForm(null); + }} + /> + {/* Tabela de andamentos */} + + {/* Modal de confirmação */} + {isConfirmOpen && ( + + )} + {/* Formulário de criação/edição */} + {isFormOpen && ( + + )} + + ); +} diff --git a/src/packages/administrativo/components/GCartorio/GCartorioTable.tsx b/src/packages/administrativo/components/GCartorio/GCartorioTable.tsx new file mode 100644 index 0000000..3a6fd92 --- /dev/null +++ b/src/packages/administrativo/components/GCartorio/GCartorioTable.tsx @@ -0,0 +1,23 @@ +'use client'; + +import { DataTable } from '@/shared/components/dataTable/DataTable'; + +import GCartorioColumns from './GCartorioColumns'; +import GCartorioTableInterface from '../../interfaces/GCartorio/GCartorioTableInterface'; + +/** + * Componente principal da tabela de Naturezas + */ +export default function GCartorioTable({ data, onEdit, onDelete }: GCartorioTableInterface) { + const columns = GCartorioColumns(onEdit, onDelete); + return ( + + + + ); +} diff --git a/src/packages/administrativo/components/GGramatica/GGramaticaColumns.tsx b/src/packages/administrativo/components/GGramatica/GGramaticaColumns.tsx new file mode 100644 index 0000000..eaf9517 --- /dev/null +++ b/src/packages/administrativo/components/GGramatica/GGramaticaColumns.tsx @@ -0,0 +1,78 @@ +import { ColumnDef } from '@tanstack/react-table'; +import { EllipsisIcon, PencilIcon, Trash2Icon } from 'lucide-react'; + +import { Button } from '@/components/ui/button'; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuGroup, + DropdownMenuItem, + DropdownMenuSeparator, + DropdownMenuTrigger, +} from '@/components/ui/dropdown-menu'; +import GetCapitalize from '@/shared/actions/text/GetCapitalize'; +import { SortableHeader } from '@/shared/components/dataTable/SortableHeader'; + +import GGramaticaInterface from '../../interfaces/GGramatica/GGramaticaInterface'; + +export default function GGramaticaColumns( + onEdit: (item: GGramaticaInterface, isEditingFormStatus: boolean) => void, + onDelete: (item: GGramaticaInterface, isEditingFormStatus: boolean) => void, +): ColumnDef[] { + return [ + // ID + { + accessorKey: 'gramatica_id', + header: ({ column }) => SortableHeader('ID', column), + cell: ({ row }) => Number(row.getValue('gramatica_id')), + enableSorting: true, + }, + + // Descrição + { + accessorKey: 'palavra', + header: ({ column }) => SortableHeader('Palavra', column), + cell: ({ row }) => GetCapitalize(String(row.getValue('palavra') || '')), + }, + + // Ações + { + id: 'actions', + header: 'Ações', + cell: ({ row }) => { + const natureza = row.original; + + return ( + + + + + + + + + + onEdit(natureza, true)}> + + Editar + + + + + onDelete(natureza, true)} + > + + Remover + + + + + ); + }, + enableSorting: false, + enableHiding: false, + }, + ]; +} diff --git a/src/packages/administrativo/components/GGramatica/GGramaticaForm.tsx b/src/packages/administrativo/components/GGramatica/GGramaticaForm.tsx new file mode 100644 index 0000000..25bfa17 --- /dev/null +++ b/src/packages/administrativo/components/GGramatica/GGramaticaForm.tsx @@ -0,0 +1,205 @@ +'use client'; + +import React, { useEffect } from 'react'; + +import { Button } from '@/components/ui/button'; +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 { ResetFormIfData } from '@/shared/actions/form/ResetFormIfData'; +import LoadingButton from '@/shared/components/loadingButton/LoadingButton'; + +import { useGGramaticaFormHook } from '../../hooks/GGramatica/useGGramaticaFormHook'; +import { GGramaticaFormInterface } from '../../interfaces/GGramatica/GGramaticaFormInterface'; + +/** + * Formulário de cadastro/edição de Natureza + * Baseado nos campos da tabela G_NATUREZA + */ +export default function GGramaticaForm({ + isOpen, + data, + onClose, + onSave, + buttonIsLoading, +}: GGramaticaFormInterface) { + const form = useGGramaticaFormHook({}); + + // Atualiza o formulário quando recebe dados para edição + useEffect(() => { + ResetFormIfData(form, data); + }, [data, form]); + + function onError(error: any) { + console.log('Erro no formulário:', error); + } + + return ( + { + if (!open) onClose(null, false); + }} + > + + + Formulário de Gramática + + Formulário de Gramática + + + {/* Formulário principal */} + + + {/* GRID MOBILE FIRST */} + + {/* Palavra */} + + ( + + Palavra + + + + + + )} + /> + + {/* Prefixo */} + + ( + + Prefixo + + + + + + )} + /> + + {/* Singular Masculino */} + + ( + + Sufixo Masculino Singular + + + + + + )} + /> + + {/* Plural Masculino */} + + ( + + Sufixo Masculino Plural + + + + + + )} + /> + + {/* Singular Feminino */} + + ( + + Sufixo Feminino Singular + + + + + + )} + /> + + {/* Plural Feminino */} + + ( + + Sufixo Feminino Plural + + + + + + )} + /> + + + {/* Rodapé */} + + + + Cancelar + + + + + + + + + ); +} diff --git a/src/packages/administrativo/components/GGramatica/GGramaticaIndex.tsx b/src/packages/administrativo/components/GGramatica/GGramaticaIndex.tsx new file mode 100644 index 0000000..be6e005 --- /dev/null +++ b/src/packages/administrativo/components/GGramatica/GGramaticaIndex.tsx @@ -0,0 +1,161 @@ +'use client'; + +import { useEffect, useState, useCallback } from 'react'; + + +import { useGGramaticaDeleteHook } from '@/packages/administrativo/hooks/GGramatica/useGGramaticaDeleteHook'; +import { useGGramaticaIndexHook } from '@/packages/administrativo/hooks/GGramatica/useGGramaticaIndexHook'; +import { useGGramaticaSaveHook } from '@/packages/administrativo/hooks/GGramatica/useGGramaticaSaveHook'; +import GGramaticaInterface from '@/packages/administrativo/interfaces/GGramatica/GGramaticaInterface'; +import ConfirmDialog from '@/shared/components/confirmDialog/ConfirmDialog'; +import { useConfirmDialog } from '@/shared/components/confirmDialog/useConfirmDialog'; +import Loading from '@/shared/components/loading/loading'; +import Header from '@/shared/components/structure/Header'; + +import GGramaticaForm from './GGramaticaForm'; +import GGramaticaTable from './GGramaticaTable'; + +export default function GGramaticaIndex() { + + // Controle de estado do botão + const [buttonIsLoading, setButtonIsLoading] = useState(false); + + // Hooks para leitura e salvamento + const { gGramatica, indexGGramatica } = useGGramaticaIndexHook(); + const { saveGGramatica } = useGGramaticaSaveHook(); + const { deleteGGramatica } = useGGramaticaDeleteHook(); + + // Estados + const [selectedData, setSelectedData] = 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, handleCancel } = useConfirmDialog(); + + /** + * Abre o formulário no modo de edição ou criação + */ + const handleOpenForm = useCallback((data: GGramaticaInterface | null) => { + setSelectedData(data); + setIsFormOpen(true); + }, []); + + /** + * Fecha o formulário e limpa o andamento selecionado + */ + const handleCloseForm = useCallback(() => { + setSelectedData(null); + setIsFormOpen(false); + }, []); + + /** + * Salva os dados do formulário + */ + const handleSave = useCallback( + async (formData: GGramaticaInterface) => { + // Coloca o botão em estado de loading + setButtonIsLoading(true); + + // Aguarda salvar o registro + await saveGGramatica(formData); + + // Remove o botão em estado de loading + setButtonIsLoading(false); + + // Atualiza a lista de dados + indexGGramatica(); + }, + [saveGGramatica, indexGGramatica, handleCloseForm], + ); + + /** + * Quando o usuário clica em "remover" na tabela + */ + const handleConfirmDelete = useCallback( + (item: GGramaticaInterface) => { + // 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 deleteGGramatica(itemToDelete); + + // Atualiza a lista + await indexGGramatica(); + + // Limpa o item selecionado + setItemToDelete(null); + + // Fecha o modal + handleCancel(); + }, [itemToDelete, indexGGramatica, handleCancel]); + + /** + * Busca inicial dos dados + */ + useEffect(() => { + indexGGramatica(); + }, []); + + /** + * Tela de loading enquanto carrega os dados + */ + if (gGramatica?.length == 0) { + return ; + } + + return ( + + {/* Cabeçalho */} + { + handleOpenForm(null); + }} + /> + {/* Tabela de andamentos */} + + {/* Modal de confirmação */} + {isConfirmOpen && ( + + )} + {/* Formulário de criação/edição */} + {isFormOpen && ( + + )} + + ); +} diff --git a/src/packages/administrativo/components/GGramatica/GGramaticaTable.tsx b/src/packages/administrativo/components/GGramatica/GGramaticaTable.tsx new file mode 100644 index 0000000..648ccaf --- /dev/null +++ b/src/packages/administrativo/components/GGramatica/GGramaticaTable.tsx @@ -0,0 +1,23 @@ +'use client'; + +import { DataTable } from '@/shared/components/dataTable/DataTable'; + +import GGramaticaColumns from './GGramaticaColumns'; +import GGramaticaTableInterface from '../../interfaces/GGramatica/GGramaticaTableInterface'; + +/** + * Componente principal da tabela de Naturezas + */ +export default function GGramaticaTable({ data, onEdit, onDelete }: GGramaticaTableInterface) { + const columns = GGramaticaColumns(onEdit, onDelete); + return ( + + + + ); +} diff --git a/src/packages/administrativo/data/GCartorio/GCartorioDeleteData.ts b/src/packages/administrativo/data/GCartorio/GCartorioDeleteData.ts new file mode 100644 index 0000000..b2e1d90 --- /dev/null +++ b/src/packages/administrativo/data/GCartorio/GCartorioDeleteData.ts @@ -0,0 +1,17 @@ +import { withClientErrorHandler } from '@/shared/actions/withClientErrorHandler/withClientErrorHandler'; +import API from '@/shared/services/api/Api'; +import { Methods } from '@/shared/services/api/enums/ApiMethodEnum'; +import ApiResponseInterface from '@/shared/services/api/interfaces/ApiResponseInterface'; + +import GCartorioInterface from '../../interfaces/GCartorio/GCartorioInterface'; + +async function executeGCartorioDeleteData(data: GCartorioInterface): Promise { + const api = new API(); + + return api.send({ + method: Methods.DELETE, + endpoint: `administrativo/g_cartorio/${data.cartorio_id}`, + }); +} + +export const GCartorioDeleteData = withClientErrorHandler(executeGCartorioDeleteData); diff --git a/src/packages/administrativo/data/GCartorio/GCartorioIndexData.ts b/src/packages/administrativo/data/GCartorio/GCartorioIndexData.ts new file mode 100644 index 0000000..5a011fb --- /dev/null +++ b/src/packages/administrativo/data/GCartorio/GCartorioIndexData.ts @@ -0,0 +1,15 @@ +import { withClientErrorHandler } from '@/shared/actions/withClientErrorHandler/withClientErrorHandler'; +import API from '@/shared/services/api/Api'; +import { Methods } from '@/shared/services/api/enums/ApiMethodEnum'; +import ApiResponseInterface from '@/shared/services/api/interfaces/ApiResponseInterface'; + +async function executeGCartorioIndexData(): Promise { + const api = new API(); + + return api.send({ + method: Methods.GET, + endpoint: `administrativo/g_cartorio/`, + }); +} + +export const GCartorioIndexData = withClientErrorHandler(executeGCartorioIndexData); diff --git a/src/packages/administrativo/data/GCartorio/GCartorioSaveData.ts b/src/packages/administrativo/data/GCartorio/GCartorioSaveData.ts new file mode 100644 index 0000000..f1ae0f6 --- /dev/null +++ b/src/packages/administrativo/data/GCartorio/GCartorioSaveData.ts @@ -0,0 +1,23 @@ +import { withClientErrorHandler } from '@/shared/actions/withClientErrorHandler/withClientErrorHandler'; +import API from '@/shared/services/api/Api'; +import { Methods } from '@/shared/services/api/enums/ApiMethodEnum'; +import ApiResponseInterface from '@/shared/services/api/interfaces/ApiResponseInterface'; + +import GCartorioInterface from '../../interfaces/GCartorio/GCartorioInterface'; + +async function executeGCartorioSaveData(data: GCartorioInterface): Promise { + // Verifica se existe ID para decidir se é atualização (PUT) ou criação (POST) + const isUpdate = Boolean(data.cartorio_id); + + // Instancia o cliente da API + const api = new API(); + + // Executa a requisição para a API com o método apropriado e envia os dados no corpo + return api.send({ + method: isUpdate ? Methods.PUT : Methods.POST, // PUT se atualizar, POST se criar + endpoint: `administrativo/g_cartorio/${data.cartorio_id || ''}`, // endpoint dinâmico + body: data, // payload enviado para a API + }); +} + +export const GCartorioSaveData = withClientErrorHandler(executeGCartorioSaveData); diff --git a/src/packages/administrativo/data/GGramatica/GGramaticaDeleteData.ts b/src/packages/administrativo/data/GGramatica/GGramaticaDeleteData.ts new file mode 100644 index 0000000..d8cd6b3 --- /dev/null +++ b/src/packages/administrativo/data/GGramatica/GGramaticaDeleteData.ts @@ -0,0 +1,17 @@ +import { withClientErrorHandler } from '@/shared/actions/withClientErrorHandler/withClientErrorHandler'; +import API from '@/shared/services/api/Api'; +import { Methods } from '@/shared/services/api/enums/ApiMethodEnum'; +import ApiResponseInterface from '@/shared/services/api/interfaces/ApiResponseInterface'; + +import GGramaticaInterface from '../../interfaces/GGramatica/GGramaticaInterface'; + +async function executeGGramaticaDeleteData(data: GGramaticaInterface): Promise { + const api = new API(); + + return api.send({ + method: Methods.DELETE, + endpoint: `administrativo/g_gramatica/${data.gramatica_id}`, + }); +} + +export const GGramaticaDeleteData = withClientErrorHandler(executeGGramaticaDeleteData); diff --git a/src/packages/administrativo/data/GGramatica/GGramaticaIndexData.ts b/src/packages/administrativo/data/GGramatica/GGramaticaIndexData.ts new file mode 100644 index 0000000..adb3335 --- /dev/null +++ b/src/packages/administrativo/data/GGramatica/GGramaticaIndexData.ts @@ -0,0 +1,15 @@ +import { withClientErrorHandler } from '@/shared/actions/withClientErrorHandler/withClientErrorHandler'; +import API from '@/shared/services/api/Api'; +import { Methods } from '@/shared/services/api/enums/ApiMethodEnum'; +import ApiResponseInterface from '@/shared/services/api/interfaces/ApiResponseInterface'; + +async function executeGGramaticaIndexData(): Promise { + const api = new API(); + + return api.send({ + method: Methods.GET, + endpoint: `administrativo/g_gramatica/`, + }); +} + +export const GGramaticaIndexData = withClientErrorHandler(executeGGramaticaIndexData); diff --git a/src/packages/administrativo/data/GGramatica/GGramaticaSaveData.ts b/src/packages/administrativo/data/GGramatica/GGramaticaSaveData.ts new file mode 100644 index 0000000..64105b2 --- /dev/null +++ b/src/packages/administrativo/data/GGramatica/GGramaticaSaveData.ts @@ -0,0 +1,23 @@ +import { withClientErrorHandler } from '@/shared/actions/withClientErrorHandler/withClientErrorHandler'; +import API from '@/shared/services/api/Api'; +import { Methods } from '@/shared/services/api/enums/ApiMethodEnum'; +import ApiResponseInterface from '@/shared/services/api/interfaces/ApiResponseInterface'; + +import GGramaticaInterface from '../../interfaces/GGramatica/GGramaticaInterface'; + +async function executeGGramaticaSaveData(data: GGramaticaInterface): Promise { + // Verifica se existe ID para decidir se é atualização (PUT) ou criação (POST) + const isUpdate = Boolean(data.gramatica_id); + + // Instancia o cliente da API + const api = new API(); + + // Executa a requisição para a API com o método apropriado e envia os dados no corpo + return api.send({ + method: isUpdate ? Methods.PUT : Methods.POST, // PUT se atualizar, POST se criar + endpoint: `administrativo/g_gramatica/${data.gramatica_id || ''}`, // endpoint dinâmico + body: data, // payload enviado para a API + }); +} + +export const GGramaticaSaveData = withClientErrorHandler(executeGGramaticaSaveData); diff --git a/src/packages/administrativo/hooks/GCartorio/useGCartorioDeleteHook.ts b/src/packages/administrativo/hooks/GCartorio/useGCartorioDeleteHook.ts new file mode 100644 index 0000000..2186a7d --- /dev/null +++ b/src/packages/administrativo/hooks/GCartorio/useGCartorioDeleteHook.ts @@ -0,0 +1,21 @@ +import { useState } from 'react'; + +import { useResponse } from '@/shared/components/response/ResponseContext'; + +import GCartorioInterface from '../../interfaces/GCartorio/GCartorioInterface'; +import { GCartorioDeleteService } from '../../services/GCartorio/GCartorioDeleteService'; + +export const useGCartorioDeleteHook = () => { + const { setResponse } = useResponse(); + + const [gGramatica, setGCartorio] = useState(); + + const deleteGCartorio = async (data: GCartorioInterface) => { + const response = await GCartorioDeleteService(data); + + setGCartorio(data); + setResponse(response); + }; + + return { gGramatica, deleteGCartorio }; +}; diff --git a/src/packages/administrativo/hooks/GCartorio/useGCartorioFormHook.ts b/src/packages/administrativo/hooks/GCartorio/useGCartorioFormHook.ts new file mode 100644 index 0000000..acb6627 --- /dev/null +++ b/src/packages/administrativo/hooks/GCartorio/useGCartorioFormHook.ts @@ -0,0 +1,14 @@ +import { zodResolver } from '@hookform/resolvers/zod'; +import { useForm } from 'react-hook-form'; + +import { GCartorioFormValues, GCartorioSchema } from '../../schemas/GCartorio/GCartorioSchema'; + +export function useGCartorioFormHook(defaults?: Partial) { + return useForm({ + resolver: zodResolver(GCartorioSchema), + defaultValues: { + cartorio_id: 0, + ...defaults, + }, + }); +} diff --git a/src/packages/administrativo/hooks/GCartorio/useGCartorioIndexHook.ts b/src/packages/administrativo/hooks/GCartorio/useGCartorioIndexHook.ts new file mode 100644 index 0000000..c324530 --- /dev/null +++ b/src/packages/administrativo/hooks/GCartorio/useGCartorioIndexHook.ts @@ -0,0 +1,27 @@ +'use client'; + +import { useState } from 'react'; + +import { useResponse } from '@/shared/components/response/ResponseContext'; + +import GCartorioInterface from '../../interfaces/GCartorio/GCartorioInterface'; +import { GCartorioIndexService } from '../../services/GCartorio/GCartorioIndexService'; + +export const useGCartorioIndexHook = () => { + const { setResponse } = useResponse(); + + const [gGramatica, setGCartorio] = useState([]); + + const indexGCartorio = async () => { + const response = await GCartorioIndexService(); + // Armazena os dados consultados + setGCartorio(response.data); + // Define a resposta (toast, modal, feedback, etc.) + setResponse(response); + }; + + return { + gGramatica, + indexGCartorio, + }; +}; diff --git a/src/packages/administrativo/hooks/GCartorio/useGCartorioSaveHook.ts b/src/packages/administrativo/hooks/GCartorio/useGCartorioSaveHook.ts new file mode 100644 index 0000000..9b7022d --- /dev/null +++ b/src/packages/administrativo/hooks/GCartorio/useGCartorioSaveHook.ts @@ -0,0 +1,35 @@ +'use client'; + +import { useState } from 'react'; + +import { useResponse } from '@/shared/components/response/ResponseContext'; + +import GCartorioInterface from '../../interfaces/GCartorio/GCartorioInterface'; +import { GCartorioSaveService } from '../../services/GCartorio/GCartorioSaveService'; + +export const useGCartorioSaveHook = () => { + const { setResponse } = useResponse(); + + const [gGramatica, setGCartorio] = useState(null); + + // controla se o formulário está aberto ou fechado + const [isOpen, setIsOpen] = useState(false); + + const saveGCartorio = async (data: GCartorioInterface) => { + const response = await GCartorioSaveService(data); + + // Armazena os dados da resposta + setGCartorio(response.data); + + // Define os dados da resposta (toast, modal, etc.) + setResponse(response); + + // Fecha o formulário automaticamente após salvar + setIsOpen(false); + + // Retorna os valores de forma imediata + return response.data; + }; + + return { gGramatica, saveGCartorio, isOpen, setIsOpen }; +}; diff --git a/src/packages/administrativo/hooks/GGramatica/useGGramaticaDeleteHook.ts b/src/packages/administrativo/hooks/GGramatica/useGGramaticaDeleteHook.ts new file mode 100644 index 0000000..01c42d0 --- /dev/null +++ b/src/packages/administrativo/hooks/GGramatica/useGGramaticaDeleteHook.ts @@ -0,0 +1,21 @@ +import { useState } from 'react'; + +import { useResponse } from '@/shared/components/response/ResponseContext'; + +import GGramaticaInterface from '../../interfaces/GGramatica/GGramaticaInterface'; +import { GGramaticaDeleteService } from '../../services/GGramatica/GGramaticaDeleteService'; + +export const useGGramaticaDeleteHook = () => { + const { setResponse } = useResponse(); + + const [gGramatica, setGGramatica] = useState(); + + const deleteGGramatica = async (data: GGramaticaInterface) => { + const response = await GGramaticaDeleteService(data); + + setGGramatica(data); + setResponse(response); + }; + + return { gGramatica, deleteGGramatica }; +}; diff --git a/src/packages/administrativo/hooks/GGramatica/useGGramaticaFormHook.ts b/src/packages/administrativo/hooks/GGramatica/useGGramaticaFormHook.ts new file mode 100644 index 0000000..f419e9b --- /dev/null +++ b/src/packages/administrativo/hooks/GGramatica/useGGramaticaFormHook.ts @@ -0,0 +1,14 @@ +import { zodResolver } from '@hookform/resolvers/zod'; +import { useForm } from 'react-hook-form'; + +import { GGramaticaFormValues, GGramaticaSchema } from '../../schemas/GGramatica/GGramaticaSchema'; + +export function useGGramaticaFormHook(defaults?: Partial) { + return useForm({ + resolver: zodResolver(GGramaticaSchema), + defaultValues: { + gramatica_id: 0, + ...defaults, + }, + }); +} diff --git a/src/packages/administrativo/hooks/GGramatica/useGGramaticaIndexHook.ts b/src/packages/administrativo/hooks/GGramatica/useGGramaticaIndexHook.ts new file mode 100644 index 0000000..08c9a72 --- /dev/null +++ b/src/packages/administrativo/hooks/GGramatica/useGGramaticaIndexHook.ts @@ -0,0 +1,27 @@ +'use client'; + +import { useState } from 'react'; + +import { useResponse } from '@/shared/components/response/ResponseContext'; + +import GGramaticaInterface from '../../interfaces/GGramatica/GGramaticaInterface'; +import { GGramaticaIndexService } from '../../services/GGramatica/GGramaticaIndexService'; + +export const useGGramaticaIndexHook = () => { + const { setResponse } = useResponse(); + + const [gGramatica, setGGramatica] = useState([]); + + const indexGGramatica = async () => { + const response = await GGramaticaIndexService(); + // Armazena os dados consultados + setGGramatica(response.data); + // Define a resposta (toast, modal, feedback, etc.) + setResponse(response); + }; + + return { + gGramatica, + indexGGramatica, + }; +}; diff --git a/src/packages/administrativo/hooks/GGramatica/useGGramaticaSaveHook.ts b/src/packages/administrativo/hooks/GGramatica/useGGramaticaSaveHook.ts new file mode 100644 index 0000000..fa0e091 --- /dev/null +++ b/src/packages/administrativo/hooks/GGramatica/useGGramaticaSaveHook.ts @@ -0,0 +1,35 @@ +'use client'; + +import { useState } from 'react'; + +import { useResponse } from '@/shared/components/response/ResponseContext'; + +import GGramaticaInterface from '../../interfaces/GGramatica/GGramaticaInterface'; +import { GGramaticaSaveService } from '../../services/GGramatica/GGramaticaSaveService'; + +export const useGGramaticaSaveHook = () => { + const { setResponse } = useResponse(); + + const [gGramatica, setGGramatica] = useState(null); + + // controla se o formulário está aberto ou fechado + const [isOpen, setIsOpen] = useState(false); + + const saveGGramatica = async (data: GGramaticaInterface) => { + const response = await GGramaticaSaveService(data); + + // Armazena os dados da resposta + setGGramatica(response.data); + + // Define os dados da resposta (toast, modal, etc.) + setResponse(response); + + // Fecha o formulário automaticamente após salvar + setIsOpen(false); + + // Retorna os valores de forma imediata + return response.data; + }; + + return { gGramatica, saveGGramatica, isOpen, setIsOpen }; +}; diff --git a/src/packages/administrativo/interfaces/GCartorio/GCartorioFormInterface.ts b/src/packages/administrativo/interfaces/GCartorio/GCartorioFormInterface.ts new file mode 100644 index 0000000..4050c5b --- /dev/null +++ b/src/packages/administrativo/interfaces/GCartorio/GCartorioFormInterface.ts @@ -0,0 +1,9 @@ +import { GCartorioFormValues } from '../../schemas/GCartorio/GCartorioSchema'; + +export interface GCartorioFormInterface { + isOpen: boolean; + data: GCartorioFormValues | null; + onClose: (item: null, isFormStatus: boolean) => void; + onSave: (data: GCartorioFormValues) => void; + buttonIsLoading: boolean; +} diff --git a/src/packages/administrativo/interfaces/GCartorio/GCartorioInterface.ts b/src/packages/administrativo/interfaces/GCartorio/GCartorioInterface.ts new file mode 100644 index 0000000..80be0f2 --- /dev/null +++ b/src/packages/administrativo/interfaces/GCartorio/GCartorioInterface.ts @@ -0,0 +1,49 @@ +export default interface GCartorioInterface { + cartorio_id?: number; + seq?: string; + cns?: string; + cnpj?: string; + denominacao_serventia?: string; + status_serventia?: number; + atribuicao?: string; + dt_instalacao?: Date; + dat_inclusao?: Date; + dat_alteracao?: Date; + uf?: string; + municipio?: string; + cod_ibge?: number; + bairro?: string; + distrito?: string; + sub_distrito?: string; + endereco?: string; + complemento?: string; + cep?: string; + telefone1?: string; + fax?: string; + email?: string; + home_page?: string; + dt_inativacao?: Date; + nome_titular?: string; + cpf_titular?: string; + dt_ingresso_titular?: Date; + dt_nomeacao_titular?: Date; + tipo_titular?: number; + forma_ingresso_titular?: number; + dt_assuncao_serventia_titular?: Date; + dt_colacao_grau_titular?: Date; + bacharelado_titular?: number; + nome_substituto?: string; + cpf_substituto?: string; + email_substituto?: string; + dat_inclusao_substituto?: Date; + dat_alteracao_substituto?: Date; + emitente?: string; + cpf_escrevente?: string; + nome_escrevente?: string; + cargo_tituloar?: string; + endereco_numero?: string; + ddd?: string; + insc_estadual?: string; + insc_municipal?: string; + razao_social?: string; +} \ No newline at end of file diff --git a/src/packages/administrativo/interfaces/GCartorio/GCartorioTableInterface.ts b/src/packages/administrativo/interfaces/GCartorio/GCartorioTableInterface.ts new file mode 100644 index 0000000..66bf19e --- /dev/null +++ b/src/packages/administrativo/interfaces/GCartorio/GCartorioTableInterface.ts @@ -0,0 +1,7 @@ +import GCartorioInterface from './GCartorioInterface'; + +export default interface GCartorioTableInterface { + data?: GCartorioInterface[]; + onEdit: (item: GCartorioInterface, isEditingFormStatus: boolean) => void; + onDelete: (item: GCartorioInterface, isEditingFormStatus: boolean) => void; +} diff --git a/src/packages/administrativo/interfaces/GGramatica/GGramaticaFormInterface.ts b/src/packages/administrativo/interfaces/GGramatica/GGramaticaFormInterface.ts new file mode 100644 index 0000000..0274452 --- /dev/null +++ b/src/packages/administrativo/interfaces/GGramatica/GGramaticaFormInterface.ts @@ -0,0 +1,9 @@ +import { GGramaticaFormValues } from '../../schemas/GGramatica/GGramaticaSchema'; + +export interface GGramaticaFormInterface { + isOpen: boolean; + data: GGramaticaFormValues | null; + onClose: (item: null, isFormStatus: boolean) => void; + onSave: (data: GGramaticaFormValues) => void; + buttonIsLoading: boolean; +} diff --git a/src/packages/administrativo/interfaces/GGramatica/GGramaticaInterface.ts b/src/packages/administrativo/interfaces/GGramatica/GGramaticaInterface.ts new file mode 100644 index 0000000..1cff723 --- /dev/null +++ b/src/packages/administrativo/interfaces/GGramatica/GGramaticaInterface.ts @@ -0,0 +1,9 @@ +export default interface GGramaticaInterface { + gramatica_id?: number, + palavra?: string, + prefixo?: string, + sufixo_ms?: string, + sufixo_mp?: string, + sufixo_fs?: string, + sufixo_fp?: string, +} \ No newline at end of file diff --git a/src/packages/administrativo/interfaces/GGramatica/GGramaticaTableInterface.ts b/src/packages/administrativo/interfaces/GGramatica/GGramaticaTableInterface.ts new file mode 100644 index 0000000..f41f2bb --- /dev/null +++ b/src/packages/administrativo/interfaces/GGramatica/GGramaticaTableInterface.ts @@ -0,0 +1,7 @@ +import GGramaticaInterface from './GGramaticaInterface'; + +export default interface GGramaticaTableInterface { + data?: GGramaticaInterface[]; + onEdit: (item: GGramaticaInterface, isEditingFormStatus: boolean) => void; + onDelete: (item: GGramaticaInterface, isEditingFormStatus: boolean) => void; +} diff --git a/src/packages/administrativo/schemas/GCartorio/GCartorioSchema.ts b/src/packages/administrativo/schemas/GCartorio/GCartorioSchema.ts new file mode 100644 index 0000000..9548bd9 --- /dev/null +++ b/src/packages/administrativo/schemas/GCartorio/GCartorioSchema.ts @@ -0,0 +1,40 @@ +import z from "zod"; + +export const GCartorioSchema = z.object({ + cartorio_id: z.number().optional(), + seq: z.string().optional(), + cns: z.string().optional(), + cnpj: z.string().optional(), + denominacao_serventia: z.string().optional(), + status_serventia: z.number().optional(), + atribuicao: z.string().optional(), + uf: z.string().optional(), + municipio: z.string().optional(), + cod_ibge: z.number().optional(), + bairro: z.string().optional(), + distrito: z.string().optional(), + sub_distrito: z.string().optional(), + endereco: z.string().optional(), + complemento: z.string().optional(), + cep: z.string().optional(), + telefone1: z.string().optional(), + fax: z.string().optional(), + email: z.string().optional(), + home_page: z.string().optional(), + nome_titular: z.string().optional(), + cpf_titular: z.string().optional(), + nome_substituto: z.string().optional(), + cpf_substituto: z.string().optional(), + email_substituto: z.string().optional(), + emitente: z.string().optional(), + cpf_escrevente: z.string().optional(), + nome_escrevente: z.string().optional(), + cargo_tituloar: z.string().optional(), + endereco_numero: z.string().optional(), + ddd: z.string().optional(), + insc_estadual: z.string().optional(), + insc_municipal: z.string().optional(), + razao_social: z.string().optional(), +}); + +export type GCartorioFormValues = z.infer; \ No newline at end of file diff --git a/src/packages/administrativo/schemas/GGramatica/GGramaticaSchema.ts b/src/packages/administrativo/schemas/GGramatica/GGramaticaSchema.ts new file mode 100644 index 0000000..218ef63 --- /dev/null +++ b/src/packages/administrativo/schemas/GGramatica/GGramaticaSchema.ts @@ -0,0 +1,13 @@ +import z from "zod"; + +export const GGramaticaSchema = z.object({ + gramatica_id: z.number().optional(), + palavra: z.string().optional(), + prefixo: z.string().optional(), + sufixo_ms: z.string().optional(), + sufixo_mp: z.string().optional(), + sufixo_fs: z.string().optional(), + sufixo_fp: z.string().optional(), +}); + +export type GGramaticaFormValues = z.infer; \ No newline at end of file diff --git a/src/packages/administrativo/schemas/GNaturezaTitulo/GNaturezaTituloSchema.ts b/src/packages/administrativo/schemas/GNaturezaTitulo/GNaturezaTituloSchema.ts index b9cf9d2..a9f4655 100644 --- a/src/packages/administrativo/schemas/GNaturezaTitulo/GNaturezaTituloSchema.ts +++ b/src/packages/administrativo/schemas/GNaturezaTitulo/GNaturezaTituloSchema.ts @@ -1,12 +1,13 @@ import z from "zod"; import { ConfirmacaoEnum } from "@/shared/enums/ConfirmacaoEnum"; +import { SituacoesEnum } from "@/shared/enums/SituacoesEnum"; export const GNaturezaTituloSchema = z.object({ natureza_titulo_id: z.number().optional(), emolumento_id: z.number().optional(), descricao: z.string().optional(), - situacao: z.enum(["A", "I"]).optional(), + situacao: z.enum(SituacoesEnum).optional(), sistema_id: z.number().optional(), tipo_cobranca: z.number().optional(), possui_valor: z.enum(ConfirmacaoEnum).optional(), diff --git a/src/packages/administrativo/services/GCartorio/GCartorioDeleteService.ts b/src/packages/administrativo/services/GCartorio/GCartorioDeleteService.ts new file mode 100644 index 0000000..7df272e --- /dev/null +++ b/src/packages/administrativo/services/GCartorio/GCartorioDeleteService.ts @@ -0,0 +1,14 @@ + +import { GCartorioDeleteData } from '../../data/GCartorio/GCartorioDeleteData'; +import { withClientErrorHandler } from '@/shared/actions/withClientErrorHandler/withClientErrorHandler'; + +import GCartorioInterface from '../../interfaces/GCartorio/GCartorioInterface'; + + +async function executeGCartorioDeleteService(data: GCartorioInterface) { + const response = await GCartorioDeleteData(data); + + return response; +} + +export const GCartorioDeleteService = withClientErrorHandler(executeGCartorioDeleteService); diff --git a/src/packages/administrativo/services/GCartorio/GCartorioIndexService.ts b/src/packages/administrativo/services/GCartorio/GCartorioIndexService.ts new file mode 100644 index 0000000..8c9da0c --- /dev/null +++ b/src/packages/administrativo/services/GCartorio/GCartorioIndexService.ts @@ -0,0 +1,11 @@ +import { withClientErrorHandler } from '@/shared/actions/withClientErrorHandler/withClientErrorHandler'; + +import { GCartorioIndexData } from '../../data/GCartorio/GCartorioIndexData'; + +export default async function executeGCartorioIndexService() { + const response = await GCartorioIndexData(); + + return response; +} + +export const GCartorioIndexService = withClientErrorHandler(executeGCartorioIndexService); diff --git a/src/packages/administrativo/services/GCartorio/GCartorioSaveService.ts b/src/packages/administrativo/services/GCartorio/GCartorioSaveService.ts new file mode 100644 index 0000000..e679b55 --- /dev/null +++ b/src/packages/administrativo/services/GCartorio/GCartorioSaveService.ts @@ -0,0 +1,12 @@ +import { withClientErrorHandler } from '@/shared/actions/withClientErrorHandler/withClientErrorHandler'; + +import { GCartorioSaveData } from '../../data/GCartorio/GCartorioSaveData'; +import GCartorioInterface from '../../interfaces/GCartorio/GCartorioInterface'; + +async function executeGCartorioSaveService(data: GCartorioInterface) { + const response = await GCartorioSaveData(data); + + return response; +} + +export const GCartorioSaveService = withClientErrorHandler(executeGCartorioSaveService); diff --git a/src/packages/administrativo/services/GGramatica/GGramaticaDeleteService.ts b/src/packages/administrativo/services/GGramatica/GGramaticaDeleteService.ts new file mode 100644 index 0000000..69a7d89 --- /dev/null +++ b/src/packages/administrativo/services/GGramatica/GGramaticaDeleteService.ts @@ -0,0 +1,14 @@ + +import { GGramaticaDeleteData } from '../../data/GGramatica/GGramaticaDeleteData'; +import { withClientErrorHandler } from '@/shared/actions/withClientErrorHandler/withClientErrorHandler'; + +import GGramaticaInterface from '../../interfaces/GGramatica/GGramaticaInterface'; + + +async function executeGGramaticaDeleteService(data: GGramaticaInterface) { + const response = await GGramaticaDeleteData(data); + + return response; +} + +export const GGramaticaDeleteService = withClientErrorHandler(executeGGramaticaDeleteService); diff --git a/src/packages/administrativo/services/GGramatica/GGramaticaIndexService.ts b/src/packages/administrativo/services/GGramatica/GGramaticaIndexService.ts new file mode 100644 index 0000000..2fab5c6 --- /dev/null +++ b/src/packages/administrativo/services/GGramatica/GGramaticaIndexService.ts @@ -0,0 +1,11 @@ +import { withClientErrorHandler } from '@/shared/actions/withClientErrorHandler/withClientErrorHandler'; + +import { GGramaticaIndexData } from '../../data/GGramatica/GGramaticaIndexData'; + +export default async function executeGGramaticaIndexService() { + const response = await GGramaticaIndexData(); + + return response; +} + +export const GGramaticaIndexService = withClientErrorHandler(executeGGramaticaIndexService); diff --git a/src/packages/administrativo/services/GGramatica/GGramaticaSaveService.ts b/src/packages/administrativo/services/GGramatica/GGramaticaSaveService.ts new file mode 100644 index 0000000..14db4e1 --- /dev/null +++ b/src/packages/administrativo/services/GGramatica/GGramaticaSaveService.ts @@ -0,0 +1,12 @@ +import { withClientErrorHandler } from '@/shared/actions/withClientErrorHandler/withClientErrorHandler'; + +import { GGramaticaSaveData } from '../../data/GGramatica/GGramaticaSaveData'; +import GGramaticaInterface from '../../interfaces/GGramatica/GGramaticaInterface'; + +async function executeGGramaticaSaveService(data: GGramaticaInterface) { + const response = await GGramaticaSaveData(data); + + return response; +} + +export const GGramaticaSaveService = withClientErrorHandler(executeGGramaticaSaveService);