Merge branch 'MVPTN-5' into release(MVP/Sprint3)

This commit is contained in:
Kenio 2025-09-16 08:59:47 -03:00
commit 5afa5b70ec
22 changed files with 912 additions and 0 deletions

View file

@ -0,0 +1,25 @@
from abstracts.action import BaseAction
from packages.v1.administrativo.schemas.g_tb_txmodelogrupo_schema import GTbTxmodelogrupoIdSchema
from packages.v1.administrativo.repositories.g_tb_txmodelogrupo.g_tb_txmodelogrupo_delete_repository import DeleteRepository
class DeleteAction(BaseAction):
"""
Serviço responsável por encapsular a lógica de negócio para a operação
de exclusão de um registro na tabela G_TB_TXMODELOGRUPO.
"""
def execute(self, txmodelogrupo_schema: GTbTxmodelogrupoIdSchema):
"""
Executa a operação de exclusão no banco de dados.
Args:
txmodelogrupo_schema (GTbTxmodelogrupoIdSchema): O esquema com o ID a ser excluído.
Returns:
O resultado da operação de exclusão.
"""
# Instanciamento do repositório
delete_repository = DeleteRepository()
# Execução do repositório
return delete_repository.execute(txmodelogrupo_schema)

View file

@ -0,0 +1,29 @@
from abstracts.action import BaseAction
from packages.v1.administrativo.schemas.g_tb_txmodelogrupo_schema import GTbTxmodelogrupoDescricaoSchema # Assumindo que um schema similar será criado
from packages.v1.administrativo.repositories.g_tb_txmodelogrupo.g_tb_txmodelogrupo_get_by_descricao_repository import GetByDescricaoRepository # Assumindo que um repositório similar será criado
class GetByDescricaoAction(BaseAction):
"""
Serviço responsável por encapsular a lógica de negócio para a operação
de busca de um registro na tabela G_TB_TXMODELOGRUPO por descrição.
"""
def execute(self, txmodelogrupo_schema: GTbTxmodelogrupoDescricaoSchema):
"""
Executa a operação de busca no banco de dados.
Args:
txmodelogrupo_schema (GTbTxmodelogrupoDescricaoSchema): O esquema com a descrição a ser buscada.
Returns:
O registro encontrado ou None.
"""
# Instanciamento do repositório
get_by_descricao_repository = GetByDescricaoRepository()
# Execução do repositório
response = get_by_descricao_repository.execute(txmodelogrupo_schema)
# Retorno da informação
return response

View file

@ -0,0 +1,25 @@
from abstracts.action import BaseAction
from packages.v1.administrativo.repositories.g_tb_txmodelogrupo.g_tb_txmodelogrupo_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_TB_TXMODELOGRUPO.
"""
def execute(self):
"""
Executa a operação de listagem no banco de dados.
Returns:
A lista de todos os registros da tabela G_TB_TXMODELOGRUPO.
"""
# 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,29 @@
from abstracts.action import BaseAction
from packages.v1.administrativo.schemas.g_tb_txmodelogrupo_schema import GTbTxmodelogrupoSaveSchema
from packages.v1.administrativo.repositories.g_tb_txmodelogrupo.g_tb_txmodelogrupo_save_repository import SaveRepository
class SaveAction(BaseAction):
"""
Serviço responsável por encapsular a lógica de negócio para a operação
de salvar um novo registro na tabela G_TB_TXMODELOGRUPO.
"""
def execute(self, txmodelogrupo_schema: GTbTxmodelogrupoSaveSchema):
"""
Executa a operação de salvamento.
Args:
txmodelogrupo_schema (GTbTxmodelogrupoSaveSchema): O esquema com os dados a serem salvos.
Returns:
O resultado da operação de salvamento.
"""
# Instanciamento do repositório
save_repository = SaveRepository()
# Execução do repositório
response = save_repository.execute(txmodelogrupo_schema)
# Retorno da informação
return response

View file

@ -0,0 +1,29 @@
from abstracts.action import BaseAction
from packages.v1.administrativo.schemas.g_tb_txmodelogrupo_schema import GTbTxmodelogrupoIdSchema
from packages.v1.administrativo.repositories.g_tb_txmodelogrupo.g_tb_txmodelogrupo_show_repository import ShowRepository
class ShowAction(BaseAction):
"""
Serviço responsável por encapsular a lógica de negócio para a exibição
de um registro na tabela G_TB_TXMODELOGRUPO.
"""
def execute(self, txmodelogrupo_schema: GTbTxmodelogrupoIdSchema):
"""
Executa a operação de exibição.
Args:
txmodelogrupo_schema (GTbTxModeloGrupoIdSchema): O esquema com o ID do registro a ser exibido.
Returns:
O resultado da operação de exibição.
"""
# Instânciamento do repositório
show_repository = ShowRepository()
# Execução do repositório
response = show_repository.execute(txmodelogrupo_schema)
# Retorno da informação
return response

View file

@ -0,0 +1,25 @@
from packages.v1.administrativo.schemas.g_tb_txmodelogrupo_schema import GTbTxmodelogrupoUpdateSchema
from packages.v1.administrativo.repositories.g_tb_txmodelogrupo.g_tb_txmodelogrupo_update_repository import UpdateRepository
class UpdateAction:
"""
Serviço responsável por encapsular a lógica de negócio para a atualização
de um registro na tabela G_TB_TXMODELOGRUPO.
"""
def execute(self, tb_txmodelogrupo_id: int, txmodelogrupo_schema: GTbTxmodelogrupoUpdateSchema):
"""
Executa a operação de atualização.
Args:
txmodelogrupo_schema (GTbTxmodelogrupoUpdateSchema): O esquema com os dados a serem atualizados.
Returns:
O resultado da operação de atualização.
"""
# Instância o repositório de atualização
update_repository = UpdateRepository()
# Chama o método de execução do repositório para realizar a atualização
return update_repository.execute(tb_txmodelogrupo_id, txmodelogrupo_schema)

View file

@ -0,0 +1,112 @@
from actions.dynamic_import.dynamic_import import DynamicImport
from packages.v1.administrativo.schemas.g_tb_txmodelogrupo_schema import (
GTbTxmodelogrupoSchema,
GTbTxmodelogrupoSaveSchema,
GTbTxmodelogrupoUpdateSchema,
GTbTxmodelogrupoIdSchema,
GTbTxmodelogrupoDescricaoSchema
)
class GTbTxmodelogrupoController:
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_tb_txmodelogrupo")
pass
# Lista todos os grupos de modelo de texto
def index(self):
# Importação da classe desejada
index_service = self.dynamic_import.service("g_tb_txmodelogrupo_index_service", "IndexService")
# Instância da classe service
self.index_service = index_service()
# Lista todos os grupos de modelo de texto
return {
'message': 'Grupos de modelo de texto localizados com sucesso',
'data': self.index_service.execute()
}
# Busca um grupo de modelo de texto específico pelo ID
def show(self, txmodelogrupo_schema: GTbTxmodelogrupoIdSchema):
# Importação da classe desejada
show_service = self.dynamic_import.service('g_tb_txmodelogrupo_show_service', 'ShowService')
# Instância da classe desejada
self.show_service = show_service()
# Busca e retorna o grupo de modelo de texto desejado
return {
'message': 'Grupo de modelo de texto localizado com sucesso',
'data': self.show_service.execute(txmodelogrupo_schema)
}
# Busca um grupo de modelo de texto pela descrição
def get_by_descricao(self, txmodelogrupo_schema: GTbTxmodelogrupoDescricaoSchema):
# Importação da classe desejada
show_service = self.dynamic_import.service('g_tb_txmodelogrupo_get_by_descricao_service', 'GetByDescricaoService')
# Instância da classe desejada
self.show_service = show_service()
# Busca e retorna o grupo de modelo de texto desejado
return {
'message': 'Grupo de modelo de texto localizado com sucesso',
'data': self.show_service.execute(txmodelogrupo_schema, True) # True para retornar a mensagem de erro caso não localize o serviço
}
# Cadastra um novo grupo de modelo de texto
def save(self, txmodelogrupo_schema: GTbTxmodelogrupoSaveSchema):
# Importação da classe desejada
save_service = self.dynamic_import.service('g_tb_txmodelogrupo_save_service', 'GTbTxmodelogrupoSaveService')
# Instância da classe desejada
self.save_service = save_service()
# Busca e retorna o grupo de modelo de texto desejado
return {
'message': 'Grupo de modelo de texto salvo com sucesso',
'data': self.save_service.execute(txmodelogrupo_schema)
}
# Atualiza os dados de um grupo de modelo de texto
def update(self, tb_txmodelogrupo_id: int, txmodelogrupo_schema: GTbTxmodelogrupoUpdateSchema):
# Importação da classe desejada
update_service = self.dynamic_import.service('g_tb_txmodelogrupo_update_service', 'GTbTxmodelogrupoUpdateService')
# Instância da classe desejada
self.update_service = update_service()
# Busca e retorna o grupo de modelo de texto desejado
return {
'message': 'Grupo de modelo de texto atualizado com sucesso',
'data': self.update_service.execute(tb_txmodelogrupo_id, txmodelogrupo_schema)
}
# Exclui um grupo de modelo de texto
def delete(self, txmodelogrupo_schema: GTbTxmodelogrupoIdSchema):
# Importação da classe desejada
delete_service = self.dynamic_import.service('g_tb_txmodelogrupo_delete_service', 'DeleteService')
# Instância da classe desejada
self.delete_service = delete_service()
# Busca e retorna o grupo de modelo de texto desejado
return {
'message': 'Grupo de modelo de texto removido com sucesso',
'data': self.delete_service.execute(txmodelogrupo_schema)
}

View file

@ -0,0 +1,78 @@
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.schemas.g_tb_txmodelogrupo_schema import (
GTbTxmodelogrupoSchema,
GTbTxmodelogrupoSaveSchema,
GTbTxmodelogrupoUpdateSchema,
GTbTxmodelogrupoDescricaoSchema,
GTbTxmodelogrupoIdSchema
)
from packages.v1.administrativo.controllers.g_tb_txmodelogrupo_controller import GTbTxmodelogrupoController
router = APIRouter()
g_tb_txmodelogrupo_controller = GTbTxmodelogrupoController()
@router.get(
'/',
status_code=status.HTTP_200_OK,
summary='Lista todos os grupos de modelo de texto cadastrados',
response_description='Lista todos os grupos de modelo de texto cadastrados'
)
async def index(current_user: dict = Depends(get_current_user)):
response = g_tb_txmodelogrupo_controller.index()
return response
@router.get(
'/descricao',
status_code=status.HTTP_200_OK,
summary='Busca um grupo de modelo de texto pela descrição',
response_description='Busca um grupo de modelo de texto pela descrição'
)
async def get_by_descricao(descricao: str, current_user: dict = Depends(get_current_user)):
txmodelogrupo_schema = GTbTxmodelogrupoDescricaoSchema(descricao=descricao)
response = g_tb_txmodelogrupo_controller.get_by_descricao(txmodelogrupo_schema)
return response
@router.get(
'/{tb_txmodelogrupo_id}',
status_code=status.HTTP_200_OK,
summary='Busca um grupo de modelo de texto pelo ID',
response_description='Busca um grupo de modelo de texto pelo ID'
)
async def show(tb_txmodelogrupo_id: int, current_user: dict = Depends(get_current_user)):
txmodelogrupo_schema = GTbTxmodelogrupoIdSchema(tb_txmodelogrupo_id=tb_txmodelogrupo_id)
response = g_tb_txmodelogrupo_controller.show(txmodelogrupo_schema)
return response
@router.post(
'/',
status_code=status.HTTP_200_OK,
summary='Cadastra um novo grupo de modelo de texto',
response_description='Cadastra um novo grupo de modelo de texto'
)
async def save(txmodelogrupo_schema: GTbTxmodelogrupoSaveSchema, current_user: dict = Depends(get_current_user)):
response = g_tb_txmodelogrupo_controller.save(txmodelogrupo_schema)
return response
@router.put(
'/{tb_txmodelogrupo_id}',
status_code=status.HTTP_200_OK,
summary='Atualiza um grupo de modelo de texto',
response_description='Atualiza um grupo de modelo de texto'
)
async def update(tb_txmodelogrupo_id: int, txmodelogrupo_schema: GTbTxmodelogrupoUpdateSchema, current_user: dict = Depends(get_current_user)):
response = g_tb_txmodelogrupo_controller.update(tb_txmodelogrupo_id, txmodelogrupo_schema)
return response
@router.delete(
'/{tb_txmodelogrupo_id}',
status_code=status.HTTP_200_OK,
summary='Remove um grupo de modelo de texto',
response_description='Remove um grupo de modelo de texto'
)
async def delete(tb_txmodelogrupo_id: int, current_user: dict = Depends(get_current_user)):
txmodelogrupo_schema = GTbTxmodelogrupoIdSchema(tb_txmodelogrupo_id=tb_txmodelogrupo_id)
response = g_tb_txmodelogrupo_controller.delete(txmodelogrupo_schema)
return response

View file

@ -0,0 +1,44 @@
from packages.v1.administrativo.schemas.g_tb_txmodelogrupo_schema import GTbTxmodelogrupoIdSchema
from abstracts.repository import BaseRepository
from fastapi import HTTPException, status
class DeleteRepository(BaseRepository):
def execute(self, txmodelogrupo_schema: GTbTxmodelogrupoIdSchema):
"""
Executa a exclusão de um registro na tabela G_TB_TXMODELOGRUPO.
Args:
txmodelogrupo_schema (GTbTxModeloGrupoIdSchema): O schema com o ID a ser excluído.
Returns:
O resultado da operação de exclusão.
Raises:
HTTPException: Se ocorrer um erro durante a exclusão.
"""
try:
# Montagem do SQL para exclusão
sql = """
DELETE FROM G_TB_TXMODELOGRUPO
WHERE TB_TXMODELOGRUPO_ID = :tb_txmodelogrupo_id
"""
# Preenchimento de parâmetros
params = {
"tb_txmodelogrupo_id": txmodelogrupo_schema.tb_txmodelogrupo_id
}
# Execução do SQL
response = self.run(sql, params)
# Retorna o resultado
return response
except Exception as e:
# Informa que houve uma falha na exclusão
raise HTTPException(
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
detail=f"Erro ao excluir modelo de grupo: {e}"
)

View file

@ -0,0 +1,17 @@
from abstracts.repository import BaseRepository
from packages.v1.administrativo.schemas.g_tb_txmodelogrupo_schema import GTbTxmodelogrupoDescricaoSchema
class GetByDescricaoRepository(BaseRepository):
def execute(self, txmodelogrupo_schema: GTbTxmodelogrupoDescricaoSchema):
# Montagem do sql
sql = """ SELECT * FROM G_TB_TXMODELOGRUPO WHERE DESCRICAO = :descricao """
# Preenchimento de parâmetros
params = {
'descricao': txmodelogrupo_schema.descricao
}
# Execução do sql
return self.fetch_one(sql, params)

View file

@ -0,0 +1,37 @@
from abstracts.repository import BaseRepository
from fastapi import HTTPException, status
class IndexRepository(BaseRepository):
"""
Repositório responsável por buscar todos os registros da tabela G_TB_TXMODELOGRUPO.
"""
def execute(self):
"""
Executa a operação de listagem de todos os registros na tabela G_TB_TXMODELOGRUPO.
Returns:
list: Uma lista de dicionários representando os registros encontrados.
"""
try:
# Montagem do SQL para buscar todos os registros da tabela G_TB_TXMODELOGRUPO
sql = """
SELECT
TB_TXMODELOGRUPO_ID,
DESCRICAO,
SITUACAO,
SISTEMA_ID
FROM
G_TB_TXMODELOGRUPO
"""
# Execução do SQL e retorno de todos os resultados
response = self.fetch_all(sql)
return response
except Exception as e:
# Em caso de erro, lança uma exceção HTTP detalhando o problema
raise HTTPException(
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
detail=f"Erro ao buscar todos os registros de G_TB_TXMODELOGRUPO: {e}"
)

View file

@ -0,0 +1,41 @@
from fastapi import HTTPException, status
from abstracts.repository import BaseRepository
from packages.v1.administrativo.schemas.g_tb_txmodelogrupo_schema import GTbTxmodelogrupoSaveSchema
class SaveRepository(BaseRepository):
def execute(self, txmodelogrupo_schema: GTbTxmodelogrupoSaveSchema):
try:
# Montagem do SQL
sql = """
INSERT INTO G_TB_TXMODELOGRUPO (
TB_TXMODELOGRUPO_ID,
DESCRICAO,
SITUACAO,
SISTEMA_ID
) VALUES (
:tb_txmodelogrupo_id,
:descricao,
:situacao,
:sistema_id
) RETURNING *;
"""
# Preenchimento de parâmetros
params = {
'tb_txmodelogrupo_id': txmodelogrupo_schema.tb_txmodelogrupo_id,
'descricao': txmodelogrupo_schema.descricao,
'situacao': txmodelogrupo_schema.situacao,
'sistema_id': txmodelogrupo_schema.sistema_id
}
# Execução do SQL
return self.run_and_return(sql, params)
except Exception as e:
# Informa que houve uma falha ao salvar o registro
raise HTTPException(
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
detail=f"Erro ao salvar modelo de grupo: {e}"
)

View file

@ -0,0 +1,46 @@
from fastapi import HTTPException, status
from abstracts.repository import BaseRepository
from packages.v1.administrativo.schemas.g_tb_txmodelogrupo_schema import GTbTxmodelogrupoIdSchema
class ShowRepository(BaseRepository):
def execute(self, txmodelogrupo_schema: GTbTxmodelogrupoIdSchema):
"""
Executa a operação de busca de um registro na tabela G_TB_TXMODELOGRUPO por ID.
Args:
txmodelogrupo_schema (GTbTxmodelogrupoIdSchema): O esquema com o ID a ser buscado.
Returns:
Um dicionário representando o registro encontrado ou None.
Raises:
HTTPException: Se ocorrer um erro durante a execução da consulta.
"""
try:
# Montagem do SQL para buscar o registro pelo ID
sql = """
SELECT
TB_TXMODELOGRUPO_ID,
DESCRICAO,
SITUACAO,
SISTEMA_ID
FROM G_TB_TXMODELOGRUPO
WHERE TB_TXMODELOGRUPO_ID = :tb_txmodelogrupo_id
"""
# Preenchimento de parâmetros
params = {
"tb_txmodelogrupo_id": txmodelogrupo_schema.tb_txmodelogrupo_id
}
# Execução do SQL e retorno do resultado
return self.fetch_one(sql, params)
except Exception as e:
# Levanta uma exceção HTTP em caso de erro
raise HTTPException(
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
detail=f"Erro ao buscar registro em G_TB_TXMODELOGRUPO: {e}"
)

View file

@ -0,0 +1,50 @@
from abstracts.repository import BaseRepository
from packages.v1.administrativo.schemas.g_tb_txmodelogrupo_schema import GTbTxmodelogrupoUpdateSchema
from fastapi import HTTPException, status
class UpdateRepository(BaseRepository):
def execute(self, tb_txmodelogrupo_id: int, txmodelogrupo_schema: GTbTxmodelogrupoUpdateSchema):
try:
updates = []
params = {}
if txmodelogrupo_schema.descricao is not None:
updates.append("DESCRICAO = :descricao")
params["descricao"] = txmodelogrupo_schema.descricao
if txmodelogrupo_schema.situacao is not None:
updates.append("SITUACAO = :situacao")
params["situacao"] = txmodelogrupo_schema.situacao
if txmodelogrupo_schema.sistema_id is not None:
updates.append("SISTEMA_ID = :sistema_id")
params["sistema_id"] = txmodelogrupo_schema.sistema_id
if not updates:
return False
params["tb_txmodelogrupo_id"] = tb_txmodelogrupo_id
sql = f"UPDATE G_TB_TXMODELOGRUPO SET {', '.join(updates)} WHERE tb_txmodelogrupo_id = :tb_txmodelogrupo_id RETURNING *;"
# Executa a query
result = self.run_and_return(sql, params)
if not result or not hasattr(result, 'tb_txmodelogrupo_id') or result.tb_txmodelogrupo_id is None:
# Informa que não existe o registro a ser modificado
raise HTTPException(
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
detail='Nenhum registro de modelo de grupo localizado para esta solicitação'
)
# Verifica o resultado da execução
if result:
# Se houver um resultado, a atualização foi bem-sucedida
return result
except Exception as e:
# Informa que houve uma falha na atualização
raise HTTPException(
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
detail=f"Erro ao atualizar modelo de grupo: {e}"
)

View file

@ -0,0 +1,101 @@
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 para G_TB_TXMODELOGRUPO
# ----------------------------------------------------
class GTbTxmodelogrupoSchema(BaseModel):
tb_txmodelogrupo_id: int # NUMERIC(10,2)
descricao: Optional[str] = None
situacao: Optional[str] = None
sistema_id: Optional[int] = None # NUMERIC(10,2)
class Config:
from_attributes = True
# ----------------------------------------------------
# Schema para criação de novo registro (POST) para G_TB_TXMODELOGRUPO
# ----------------------------------------------------
class GTbTxmodelogrupoSaveSchema(BaseModel):
tb_txmodelogrupo_id: Optional[int] = None # NUMERIC(10,2)
descricao: str
situacao: Optional[str] = None
sistema_id: Optional[int] = None # NUMERIC(10,2)
@field_validator('descricao')
def validate_descricao(cls, v):
if not v or len(v.strip()) == 0:
raise ValueError("A descrição é obrigatória.")
return Text.sanitize_input(v)
@model_validator(mode='after')
def validate_all_fields(self):
errors = []
if not self.descricao or len(self.descricao.strip()) == 0:
errors.append({'input': 'descricao', 'message': 'A descrição é obrigatória.'})
# Validação específica para TB_TXMODELOGRUPO_ID se não for fornecido e for obrigatório para criação
# Se TB_TXMODELOGRUPO_ID é gerado pelo banco, esta validação pode ser removida ou ajustada
if self.tb_txmodelogrupo_id is None:
# Assumindo que TB_TXMODELOGRUPO_ID é gerado pelo DB, caso contrário, descomente e ajuste:
# errors.append({'input': 'tb_txmodelogrupo_id', 'message': 'O ID do modelo de grupo é obrigatório.'})
pass
if errors:
raise HTTPException(
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
detail=errors
)
return self
# ----------------------------------------------------
# Schema para atualização de registro (PUT) para G_TB_TXMODELOGRUPO
# ----------------------------------------------------
class GTbTxmodelogrupoUpdateSchema(BaseModel):
descricao: Optional[str] = None
situacao: Optional[str] = None
sistema_id: Optional[int] = None # NUMERIC(10,2)
@field_validator('descricao')
def validate_descricao_field(cls, v):
# Permite que a descrição seja None para atualizações parciais
if v is not None:
return Text.sanitize_input(v)
return v
# ----------------------------------------------------
# Schema para localizar um registro específico pelo ID (GET, DELETE) para G_TB_TXMODELOGRUPO
# ----------------------------------------------------
class GTbTxmodelogrupoIdSchema(BaseModel):
# Campos utilizados
tb_txmodelogrupo_id: int # NUMERIC(10,2)
@field_validator('tb_txmodelogrupo_id')
def validate_id(cls, v):
if v is None:
raise ValueError("O ID do modelo de grupo é obrigatório.")
# Pode adicionar validação de formato ou valor se necessário
return v
# ----------------------------------------------------
# Schema para localizar um registro pela descrição (GET) para G_TB_TXMODELOGRUPO
# ----------------------------------------------------
class GTbTxmodelogrupoDescricaoSchema(BaseModel):
# Campos utilizados
descricao: str
@field_validator('descricao')
def validar_e_sanitizar_descricao(cls, v):
if not v:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail='Informe a descrição'
)
return Text.sanitize_input(v)
class Config:
from_attributes = True

View file

@ -0,0 +1,26 @@
from packages.v1.administrativo.schemas.g_tb_txmodelogrupo_schema import GTbTxmodelogrupoIdSchema
from packages.v1.administrativo.actions.g_tb_txmodelogrupo.g_tb_txmodelogrupo_delete_action import DeleteAction
class DeleteService:
"""
Serviço responsável por encapsular a lógica de negócio para a exclusão de um registro na tabela G_TB_TXMODELOGRUPO.
"""
def execute(self, txmodelogrupo_schema: GTbTxmodelogrupoIdSchema):
"""
Executa a lógica de negócio para a exclusão de um registro na tabela G_TB_TXMODELOGRUPO.
Args:
txmodelogrupo_schema (GTbTxmodelogrupoIdSchema): O schema com o ID a ser excluído.
Returns:
O resultado da operação de exclusão.
"""
# Instanciamento de ação
delete_action = DeleteAction()
# Executa a ação em questão
data = delete_action.execute(txmodelogrupo_schema)
# Retorno da informação
return data

View file

@ -0,0 +1,40 @@
from fastapi import HTTPException, status
from packages.v1.administrativo.schemas.g_tb_txmodelogrupo_schema import GTbTxmodelogrupoDescricaoSchema
from packages.v1.administrativo.actions.g_tb_txmodelogrupo.g_tb_txmodelogrupo_get_by_descricao_action import GetByDescricaoAction
class GetByDescricaoService:
"""
Serviço responsável por encapsular a lógica de negócio para a exibição de um registro na tabela
G_TB_TXMODELOGRUPO pela descrição.
"""
def execute(self, txmodelogrupo_schema: GTbTxmodelogrupoDescricaoSchema, messageValidate: bool):
"""
Executa a lógica de negócio para a exibição de um registro na tabela G_TB_TXMODELOGRUPO pela descrição.
Args:
txmodelogrupo_schema (GTbTxmodelogrupoDescricaoSchema): O esquema com a descrição a ser buscada.
messageValidate (bool): Indica se a validação de mensagem deve ser realizada.
Returns:
dict: O registro encontrado ou None.
Raises:
HTTPException: Se o registro não for encontrado e messageValidate for True.
"""
# Instanciamento de ação
get_by_descricao_action = GetByDescricaoAction()
# Executa a ação em questão
data = get_by_descricao_action.execute(txmodelogrupo_schema)
if messageValidate:
if not data:
# Retorna uma exceção se o registro não for encontrado
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail='Não foi possível localizar o registro'
)
# Retorno da informação
return data

View file

@ -0,0 +1,34 @@
from fastapi import HTTPException, status
from packages.v1.administrativo.schemas.g_tb_txmodelogrupo_schema import GTbTxmodelogrupoSchema
from packages.v1.administrativo.actions.g_tb_txmodelogrupo.g_tb_txmodelogrupo_index_action import IndexAction
class IndexService:
"""
Serviço responsável por encapsular a lógica de negócio para a listagem de todos os registros na tabela
G_TB_TXMODELOGRUPO.
"""
def execute(self):
"""
Executa a lógica de negócio para a listagem de todos os registros.
Returns:
A lista de todos os registros encontrados.
"""
# Instanciamento de ação
index_action = IndexAction()
# Executa a busca de todas as ações
data = index_action.execute()
# Verifica se foi localizado 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 grupos de modelo de texto'
)
# Retorna as informações localizadas
return data

View file

@ -0,0 +1,70 @@
from actions.dynamic_import.dynamic_import import DynamicImport
from packages.v1.sequencia.schemas.g_sequencia import GSequenciaSchema
from packages.v1.sequencia.services.g_sequencia.generate_service import GenerateService
from packages.v1.administrativo.schemas.g_tb_txmodelogrupo_schema import GTbTxmodelogrupoSaveSchema, GTbTxmodelogrupoDescricaoSchema
from packages.v1.administrativo.actions.g_tb_txmodelogrupo.g_tb_txmodelogrupo_save_action import SaveAction
from fastapi import HTTPException, status
class GTbTxmodelogrupoSaveService:
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_tb_txmodelogrupo")
pass
# Cadastra o novo modelo de grupo serviço
def execute(self, txmodelogrupo_schema: GTbTxmodelogrupoSaveSchema):
# Armazena possíveis erros
errors = []
# Verifica se a descrição já está sendo utilizada
# Importação de service de get_by_descricao
get_by_descricao_service = self.dynamic_import.service("g_tb_txmodelogrupo_get_by_descricao_service", "GetByDescricaoService")
# Instanciamento da service
self.get_by_descricao_service = get_by_descricao_service()
# Verifica se a descrição já está sendo utilizada
self.response = self.get_by_descricao_service.execute(GTbTxmodelogrupoDescricaoSchema(descricao=txmodelogrupo_schema.descricao), False)
# Se houver retorno significa que a descrição já está sendo utilizada
if self.response:
errors.append({'input': 'descricao', 'message': 'A descrição informada já está sendo utilizada.'})
# Se houver erros, informo
if errors:
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail=errors
)
# Verifica se precisa gerar o id de sequência
if not txmodelogrupo_schema.tb_txmodelogrupo_id:
# Crio um objeto de sequencia
sequencia_schema = GSequenciaSchema()
# Define os dados para atualizar a sequência
sequencia_schema.tabela = 'G_TB_TXMODELOGRUPO'
# Busco a sequência atualizada
generate_service = GenerateService()
# Busco a sequência atualizada
sequencia = generate_service.execute(sequencia_schema)
# Atualiza os dados da chave primária
txmodelogrupo_schema.tb_txmodelogrupo_id = sequencia.sequencia
# Instânciamento de ações
saveAction = SaveAction()
# Retorna todos os produtos desejados
return saveAction.execute(txmodelogrupo_schema)

View file

@ -0,0 +1,26 @@
from fastapi import HTTPException, status
from packages.v1.administrativo.schemas.g_tb_txmodelogrupo_schema import GTbTxmodelogrupoIdSchema # Assumindo que este schema será criado
from packages.v1.administrativo.actions.g_tb_txmodelogrupo.g_tb_txmodelogrupo_show_action import ShowAction # Assumindo que esta action será criada
class ShowService:
def execute(self, txmodelogrupo_schema: GTbTxmodelogrupoIdSchema):
"""
Executa a lógica de negócio para a exibição de um registro na tabela
G_TB_TXMODELOGRUPO pelo ID.
"""
# Instanciamento de ação
show_action = ShowAction()
# Executa a ação em questão
data = show_action.execute(txmodelogrupo_schema)
if not data:
# Retorna uma exceção se o registro não for encontrado
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail='Não foi possível localizar o registro do grupo de modelo de texto.'
)
# Retorno da informação
return data

View file

@ -0,0 +1,22 @@
from packages.v1.administrativo.schemas.g_tb_txmodelogrupo_schema import GTbTxmodelogrupoUpdateSchema
from packages.v1.administrativo.actions.g_tb_txmodelogrupo.g_tb_txmodelogrupo_update_action import UpdateAction
class GTbTxmodelogrupoUpdateService:
def execute(self, tb_txmodelogrupo_id : int, txmodelogrupo_schema: GTbTxmodelogrupoUpdateSchema):
"""
Executa a lógica de negócio para a atualização de um registro na tabela
G_TB_TXMODELOGRUPO.
Args:
tb_txmodelogrupo_id (int): O ID do registro a ser atualizado.
txmodelogrupo_schema (GTbTxmodelogrupoUpdateSchema): O schema com os dados atualizados.
Returns:
O resultado da operação de atualização.
"""
# Instanciamento de ação
updateAction = UpdateAction()
# Retorna o resultado da execução da ação de atualização
return updateAction.execute(tb_txmodelogrupo_id, txmodelogrupo_schema)

View file

@ -2,6 +2,7 @@
from fastapi import APIRouter
# Importa os módulos de rotas específicos
from packages.v1.administrativo.endpoints import g_tb_txmodelogrupo_endpoint
from packages.v1.administrativo.endpoints import g_tb_profissao_endpoint
from packages.v1.administrativo.endpoints import c_caixa_item_endpoint
from packages.v1.administrativo.endpoints import g_usuario_endpoint
@ -46,4 +47,9 @@ api_router.include_router(
# Inclui as rotas de g_tb_regimecomunhao
api_router.include_router(
g_tb_regimecomunhao_endpoint.router, prefix="/administrativo/g_tb_regimecomunhao", tags=["Regime de Comunhão"]
)
# Inclui as rotas de g_tb_txmodelogrupo
api_router.include_router(
g_tb_txmodelogrupo_endpoint.router, prefix="/administrativo/g_tb_txmodelogrupo", tags=["Modelo grupo"]
)