[MVPTN-106] feat(get): Feito o GET da tabela g_emolumento por sistema_id
This commit is contained in:
parent
ebeb5e4827
commit
7d7aaf24b8
8 changed files with 356 additions and 1 deletions
|
|
@ -70,7 +70,7 @@
|
||||||
"header": [],
|
"header": [],
|
||||||
"body": {
|
"body": {
|
||||||
"mode": "raw",
|
"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": {
|
"options": {
|
||||||
"raw": {
|
"raw": {
|
||||||
"language": "json"
|
"language": "json"
|
||||||
|
|
@ -8501,6 +8501,81 @@
|
||||||
},
|
},
|
||||||
"response": []
|
"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",
|
"name": "GET ID",
|
||||||
"event": [
|
"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",
|
"name": "Andamento Serviço",
|
||||||
"item": [
|
"item": [
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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)
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
48
packages/v1/administrativo/schemas/g_emolumento_schema.py
Normal file
48
packages/v1/administrativo/schemas/g_emolumento_schema.py
Normal 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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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 g_marcacao_tipo_endpoint
|
||||||
from packages.v1.administrativo.endpoints import t_servico_etiqueta_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_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
|
# Cria uma instância do APIRouter que vai agregar todas as rotas da API
|
||||||
api_router = APIRouter()
|
api_router = APIRouter()
|
||||||
|
|
@ -141,3 +142,8 @@ api_router.include_router(
|
||||||
api_router.include_router(
|
api_router.include_router(
|
||||||
g_uf_endpoint.router, prefix="/administrativo/g_uf", tags=["Estados"]
|
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"]
|
||||||
|
)
|
||||||
Loading…
Add table
Reference in a new issue