diff --git a/packages/v1/administrativo/actions/g_uf/g_uf_index_action.py b/packages/v1/administrativo/actions/g_uf/g_uf_index_action.py new file mode 100644 index 0000000..7ecff70 --- /dev/null +++ b/packages/v1/administrativo/actions/g_uf/g_uf_index_action.py @@ -0,0 +1,24 @@ +from abstracts.action import BaseAction +from packages.v1.administrativo.repositories.g_uf.g_uf_index_repository import IndexRepository + +class IndexAction(BaseAction): + """ + Serviço responsável por encapsular a lógica de negócio para a operação + de listagem de todos os registros na tabela G_UF. + """ + + def execute(self): + """ + Executa a operação de listagem no banco de dados. + + Returns: + A lista de todos os registros. + """ + # Instanciamento do repositório + index_repository = IndexRepository() + + # Execução do repositório + response = index_repository.execute() + + # Retorno da informação + return response \ No newline at end of file diff --git a/packages/v1/administrativo/controllers/g_uf_controller.py b/packages/v1/administrativo/controllers/g_uf_controller.py new file mode 100644 index 0000000..35b0b58 --- /dev/null +++ b/packages/v1/administrativo/controllers/g_uf_controller.py @@ -0,0 +1,32 @@ +from actions.dynamic_import.dynamic_import import DynamicImport +from packages.v1.administrativo.schemas.g_uf_schema import ( + GUfSchema +) + +class GUfController: + + def __init__(self): + # Action responsável por carregar as services de acordo com o estado + self.dynamic_import = DynamicImport() + + # Define o pacote que deve ser carregado + self.dynamic_import.set_package("administrativo") + + # Define a tabela que o pacote pertence + self.dynamic_import.set_table("g_uf") + pass + + # Lista todos os registros de g_uf + def index(self): + + # Importação da classe desejada + indexService = self.dynamic_import.service("g_uf_index_service", "IndexService") + + # Instância da classe service + self.indexService = indexService() + + # Lista todos os registros de g_uf + return { + 'message': 'Registros de g_uf localizados com sucesso', + 'data': self.indexService.execute() + } \ No newline at end of file diff --git a/packages/v1/administrativo/endpoints/g_uf_endpoint.py b/packages/v1/administrativo/endpoints/g_uf_endpoint.py new file mode 100644 index 0000000..adb0c95 --- /dev/null +++ b/packages/v1/administrativo/endpoints/g_uf_endpoint.py @@ -0,0 +1,25 @@ +# Importação de bibliotecas +from typing import Optional +from fastapi import APIRouter, Body, Depends, status +from actions.jwt.get_current_user import get_current_user +from packages.v1.administrativo.controllers.g_uf_controller import GUfController +from packages.v1.administrativo.schemas.g_uf_schema import GUfSchema + +# Inicializa o roteador para as rotas do tipo de reconhecimento +router = APIRouter() + +# Instanciamento do controller desejado +g_uf_controller = GUfController() + +# Lista todos os registros de uf +@router.get('/', + status_code=status.HTTP_200_OK, + summary='Lista todos os registros de UF cadastrados', + response_description='Lista todos os registros de UF cadastrados') +async def index(current_user: dict = Depends(get_current_user)): + + # Busca todos os registros de uf cadastrados + response = g_uf_controller.index() + + # Retorna os dados localizados + return response \ No newline at end of file diff --git a/packages/v1/administrativo/repositories/g_uf/g_uf_index_repository.py b/packages/v1/administrativo/repositories/g_uf/g_uf_index_repository.py new file mode 100644 index 0000000..57db0db --- /dev/null +++ b/packages/v1/administrativo/repositories/g_uf/g_uf_index_repository.py @@ -0,0 +1,23 @@ +from abstracts.repository import BaseRepository + +class IndexRepository(BaseRepository): + """ + Repositório para a operação de listagem de todos os registros + na tabela G_UF. + """ + + def execute(self): + """ + Executa a consulta SQL para buscar todos os registros. + + Returns: + Uma lista de dicionários contendo os dados dos registros. + """ + # Montagem do SQL + sql = """ SELECT * FROM G_UF """ + + # Execução do sql + response = self.fetch_all(sql) + + # Retorna os dados localizados + return response \ No newline at end of file diff --git a/packages/v1/administrativo/schemas/g_uf_schema.py b/packages/v1/administrativo/schemas/g_uf_schema.py new file mode 100644 index 0000000..05c7f68 --- /dev/null +++ b/packages/v1/administrativo/schemas/g_uf_schema.py @@ -0,0 +1,18 @@ +from pydantic import BaseModel, field_validator, model_validator +from fastapi import HTTPException, status +from typing import Optional + +# Funções para sanitização de entradas (evitar XSS, SQLi etc.) +from actions.validations.text import Text + +# ---------------------------------------------------- +# Schema base +# ---------------------------------------------------- +class GUfSchema(BaseModel): + g_uf_id: Optional[int] = None + sigla: Optional[str] = None + nome: Optional[str] = None + cod_uf_ibge: Optional[str] = None + + class Config: + from_attributes = True diff --git a/packages/v1/administrativo/services/g_uf/go/g_uf_index_service.py b/packages/v1/administrativo/services/g_uf/go/g_uf_index_service.py new file mode 100644 index 0000000..bba8a48 --- /dev/null +++ b/packages/v1/administrativo/services/g_uf/go/g_uf_index_service.py @@ -0,0 +1,32 @@ +from fastapi import HTTPException, status +from packages.v1.administrativo.actions.g_uf.g_uf_index_action import IndexAction + +class IndexService: + """ + Serviço responsável por encapsular a lógica de negócio para a operação + de listagem de registros na tabela G_UF. + """ + + def execute(self): + """ + Executa a operação de busca de todos os registros no banco de dados. + + Returns: + A lista de registros encontrados. + """ + # Instanciamento da ação + index_action = IndexAction() + + # Executa a busca de todas as ações + data = index_action.execute() + + # Verifica se foram localizados registros + if not data: + # Retorna uma exceção + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail='Não foi possível localizar os registros de UF' + ) + + # Retorna as informações localizadas + return data \ No newline at end of file diff --git a/packages/v1/api.py b/packages/v1/api.py index 0095a87..d187659 100644 --- a/packages/v1/api.py +++ b/packages/v1/api.py @@ -20,6 +20,7 @@ from packages.v1.administrativo.endpoints import t_minuta_endpoint from packages.v1.administrativo.endpoints import g_tb_bairro_endpoint from packages.v1.administrativo.endpoints import g_tb_tipologradouro_endpoint from packages.v1.administrativo.endpoints import g_cidade_endpoint +from packages.v1.administrativo.endpoints import g_uf_endpoint # Cria uma instância do APIRouter que vai agregar todas as rotas da API api_router = APIRouter() @@ -117,4 +118,9 @@ api_router.include_router( # Inclui as rotas de g_cidade api_router.include_router( g_cidade_endpoint.router, prefix="/administrativo/g_cidade", tags=["Cidades"] +) + +# Inclui as rotas de g_uf +api_router.include_router( + g_uf_endpoint.router, prefix="/administrativo/g_uf", tags=["Estados"] ) \ No newline at end of file