[MVPTN-91] feat(Crud): Criação do endpoint que retorna todos os estados brasileiros

This commit is contained in:
Kenio 2025-09-26 13:08:23 -03:00
parent 2b4596818b
commit 729c374a1c
7 changed files with 160 additions and 0 deletions

View file

@ -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

View file

@ -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()
}

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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"]
)