[MVPTN-106] feat(get): Feito o GET da tabela g_emolumento por sistema_id

This commit is contained in:
Kenio 2025-10-14 15:28:37 -03:00
parent ebeb5e4827
commit 7d7aaf24b8
8 changed files with 356 additions and 1 deletions

View file

@ -70,7 +70,7 @@
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"login\" : \"Kenio0\",\r\n \"senha_api\": \"123123\"\r\n}",
"raw": "{\r\n \"login\" : \"Kenio\",\r\n \"senha_api\": \"123123\"\r\n}",
"options": {
"raw": {
"language": "json"
@ -8501,6 +8501,81 @@
},
"response": []
},
{
"name": "GET GRUPO",
"event": [
{
"listen": "test",
"script": {
"exec": [
"pm.test(\"Status code é 201 ou 200\", function () {\r",
" pm.expect(pm.response.code).to.be.oneOf([200, 201]);\r",
"});\r",
"\r",
"pm.test(\"Resposta contém ID ou confirmação\", function () {\r",
" const jsonData = pm.response.json();\r",
" pm.expect(jsonData).to.have.any.keys(\"id\", \"message\", \"status\");\r",
"});\r",
"\r",
"pm.test(\"Mensagem indica sucesso\", function () {\r",
" const jsonData = pm.response.json();\r",
" pm.expect(jsonData.message || \"\").to.match(/sucesso|criado|registrado/i);\r",
"});\r",
""
],
"type": "text/javascript",
"packages": {},
"requests": {}
}
}
],
"protocolProfileBehavior": {
"disableBodyPruning": true
},
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{BearerToken}}",
"type": "string"
}
]
},
"method": "GET",
"header": [],
"body": {
"mode": "raw",
"raw": ""
},
"url": {
"raw": "{{BaseUrlV1}}administrativo/g_marcacao_tipo/grupo?grupo=MODELO_ETIQUETA&sistema_id=2&situacao=A",
"host": [
"{{BaseUrlV1}}administrativo"
],
"path": [
"g_marcacao_tipo",
"grupo"
],
"query": [
{
"key": "grupo",
"value": "MODELO_ETIQUETA"
},
{
"key": "sistema_id",
"value": "2"
},
{
"key": "situacao",
"value": "A"
}
]
}
},
"response": []
},
{
"name": "GET ID",
"event": [
@ -8741,6 +8816,65 @@
}
]
},
{
"name": "Emolumentos",
"item": [
{
"name": "GET",
"event": [
{
"listen": "test",
"script": {
"exec": [
"pm.test(\"Status code é 201 ou 200\", function () {\r",
" pm.expect(pm.response.code).to.be.oneOf([200, 201]);\r",
"});\r",
"\r",
"pm.test(\"Resposta contém ID ou confirmação\", function () {\r",
" const jsonData = pm.response.json();\r",
" pm.expect(jsonData).to.have.any.keys(\"id\", \"message\", \"status\");\r",
"});\r",
"\r",
"pm.test(\"Mensagem indica sucesso\", function () {\r",
" const jsonData = pm.response.json();\r",
" pm.expect(jsonData.message || \"\").to.match(/sucesso|criado|registrado/i);\r",
"});\r",
""
],
"type": "text/javascript",
"packages": {},
"requests": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{BearerToken}}",
"type": "string"
}
]
},
"method": "GET",
"header": [],
"url": {
"raw": "{{BaseUrlV1}}administrativo/g_emolumento/1",
"host": [
"{{BaseUrlV1}}administrativo"
],
"path": [
"g_emolumento",
"1"
]
}
},
"response": []
}
]
},
{
"name": "Andamento Serviço",
"item": [

View file

@ -0,0 +1,27 @@
from abstracts.action import BaseAction
from packages.v1.administrativo.schemas.g_emolumento_schema import GEmolumentoSistemaIdSchema
# O repositório IndexRepository deve ser substituído pelo GEmolumentoIndexRepository.
from packages.v1.administrativo.repositories.g_emolumento.g_emolumento_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_EMOLUMENTO.
"""
def execute(self, emolumento_schema: GEmolumentoSistemaIdSchema):
"""
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(emolumento_schema)
# Retorno da informação
return response

View file

@ -0,0 +1,30 @@
from actions.dynamic_import.dynamic_import import DynamicImport
from packages.v1.administrativo.schemas.g_emolumento_schema import GEmolumentoSistemaIdSchema
class GEmolumentoController:
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_emolumento")
pass
# Lista todos os registros de emolumento por sistema
def index(self, emolumento_schema: GEmolumentoSistemaIdSchema):
# Importação da classe desejada
indexService = self.dynamic_import.service("g_emolumento_index_service", "IndexService")
# Instância da classe service
self.indexService = indexService()
# Lista todos os registros de emolumento
return {
'message': 'Registros de emolumento localizados com sucesso',
'data': self.indexService.execute(emolumento_schema)
}

View file

@ -0,0 +1,28 @@
# 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_emolumento_controller import GEmolumentoController
from packages.v1.administrativo.schemas.g_emolumento_schema import GEmolumentoSistemaIdSchema
# Inicializa o roteador para as rotas do emolumento
router = APIRouter()
# Instanciamento do controller desejado
g_emolumento_controller = GEmolumentoController()
# Localiza um registro de emolumento pelo ID
@router.get('/{sistema_id}',
status_code=status.HTTP_200_OK,
summary='Busca um registro de emolumento em específico pelo ID',
response_description='Busca um registro de emolumento em específico')
async def index(sistema_id : int, current_user: dict = Depends(get_current_user)):
# Cria o schema com os dados recebidos
emolumento_schema = GEmolumentoSistemaIdSchema(sistema_id=sistema_id)
# Busca um registro de emolumento específico pelo ID
response = g_emolumento_controller.index(emolumento_schema)
# Retorna os dados localizados
return response

View file

@ -0,0 +1,48 @@
from abstracts.repository import BaseRepository
from packages.v1.administrativo.schemas.g_emolumento_schema import GEmolumentoSistemaIdSchema
class IndexRepository(BaseRepository):
"""
Repositório para a operação de listagem de todos os registros
na tabela G_EMOLUMENTO.
"""
def execute(self, emolumento_schema: GEmolumentoSistemaIdSchema):
"""
Executa a consulta SQL para buscar todos os registros.
Returns:
Uma lista de dicionários contendo os dados dos registros.
"""
# Montagem do SQL
# Tabela ajustada para G_EMOLUMENTO
sql = """ SELECT EMOLUMENTO_ID,
DESCRICAO,
TIPO,
SISTEMA_ID,
SELO_GRUPO_ID,
REG_AVERB,
PRE_DEFINIDO,
SITUACAO,
SITUACAO_RI,
COM_REDUCAO,
MOTIVO_REDUCAO,
VALOR_MAXIMO_CERTIDAO,
TIPO_OBJETIVO,
MODELO_TAG,
CODIGO_NOTA_ID,
CONVENIO_CODHAB,
ITEM_DF
FROM G_EMOLUMENTO
WHERE SISTEMA_ID = :sistema_id AND (SITUACAO = 'A' OR SITUACAO IS NULL) ORDER BY DESCRICAO """
# Preenchimento de parâmetros
params = {
"sistema_id": emolumento_schema.sistema_id
}
# Execução do sql
response = self.fetch_all(sql, params)
# Retorna os dados localizados
return response

View file

@ -0,0 +1,48 @@
from pydantic import BaseModel, field_validator, model_validator
from fastapi import HTTPException, status
from typing import Optional, ClassVar, Dict
from decimal import Decimal
# Assumindo que a classe Text está disponível no caminho 'actions.validations.text'
from actions.validations.text import Text
# ----------------------------------------------------
# Schema base
# ----------------------------------------------------
class GEmolumentoSchema(BaseModel):
emolumento_id: Optional[int] = None # NUMERIC(10,2) PK
descricao: Optional[str] = None # VARCHAR(260)
tipo: Optional[str] = None # VARCHAR(1)
sistema_id: Optional[int] = None # NUMERIC(10,2)
selo_grupo_id: Optional[int] = None # NUMERIC(10,2)
reg_averb: Optional[str] = None # VARCHAR(1)
pre_definido: Optional[str] = None # VARCHAR(1)
situacao: Optional[str] = None # VARCHAR(1)
situacao_ri: Optional[str] = None # VARCHAR(1)
com_reducao: Optional[str] = None # VARCHAR(1)
motivo_reducao: Optional[str] = None # VARCHAR(120)
valor_maximo_certidao: Optional[Decimal] = None # NUMERIC(14,3)
tipo_objetivo: Optional[str] = None # VARCHAR(3)
modelo_tag: Optional[str] = None # VARCHAR(3)
codigo_nota_id: Optional[int] = None # NUMERIC(10,2)
convenio_codhab: Optional[str] = None # VARCHAR(1)
item_df: Optional[str] = None # VARCHAR(10)
# Sanitiza campos de texto
@field_validator(
'descricao', 'tipo', 'reg_averb', 'pre_definido', 'situacao',
'situacao_ri', 'com_reducao', 'motivo_reducao', 'tipo_objetivo',
'modelo_tag', 'convenio_codhab', 'item_df'
)
def sanitize_fields(cls, v):
if isinstance(v, str) and v:
return Text.sanitize_input(v)
return v
# ----------------------------------------------------
# Schema para localizar um registro pelo ID (GET)
# ----------------------------------------------------
class GEmolumentoSistemaIdSchema(BaseModel):
sistema_id: int

View file

@ -0,0 +1,34 @@
from fastapi import HTTPException, status
from packages.v1.administrativo.schemas.g_emolumento_schema import GEmolumentoSistemaIdSchema
# Importação da Action ajustada para o novo prefixo
from packages.v1.administrativo.actions.g_emolumento.g_emolumento_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_EMOLUMENTO.
"""
def execute(self, emolumento_schema: GEmolumentoSistemaIdSchema):
"""
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(emolumento_schema)
# 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 G_EMOLUMENTO'
)
# Retorna as informações localizadas
return data

View file

@ -24,6 +24,7 @@ from packages.v1.administrativo.endpoints import t_servico_tipo_endpoint
from packages.v1.administrativo.endpoints import g_marcacao_tipo_endpoint
from packages.v1.administrativo.endpoints import t_servico_etiqueta_endpoint
from packages.v1.administrativo.endpoints import g_uf_endpoint
from packages.v1.administrativo.endpoints import g_emolumento_endpoint
# Cria uma instância do APIRouter que vai agregar todas as rotas da API
api_router = APIRouter()
@ -140,4 +141,9 @@ api_router.include_router(
# Inclui as rotas de g_uf
api_router.include_router(
g_uf_endpoint.router, prefix="/administrativo/g_uf", tags=["Estados"]
)
# Inclui as rotas de g_emolumento
api_router.include_router(
g_emolumento_endpoint.router, prefix="/administrativo/g_emolumento", tags=["Emolumentos"]
)