diff --git a/packages/v1/administrativo/actions/g_marcacao_tipo/g_marcacao_tipo_get_by_grupo_action.py b/packages/v1/administrativo/actions/g_marcacao_tipo/g_marcacao_tipo_get_by_grupo_action.py new file mode 100644 index 0000000..f3301f5 --- /dev/null +++ b/packages/v1/administrativo/actions/g_marcacao_tipo/g_marcacao_tipo_get_by_grupo_action.py @@ -0,0 +1,31 @@ +from abstracts.action import BaseAction +# Ajuste do schema de entrada +from packages.v1.administrativo.schemas.g_marcacao_tipo_schema import GMarcacaoTipoGrupoSchema +# Ajuste do repositório +from packages.v1.administrativo.repositories.g_marcacao_tipo.g_marcacao_tipo_get_by_grupo_repository import GetByGrupoRepository + + +class GetByGrupoAction(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_MARCACAO_TIPO por filtro. + """ + + def execute(self, marcacao_tipo_schema: GMarcacaoTipoGrupoSchema): + """ + Executa a operação de busca no banco de dados. + + Args: + marcacao_tipo_schema (GMarcacaoTipoGrupoSchema): O esquema com os filtros a serem buscados. + + Returns: + O registro encontrado ou None. + """ + # Instanciamento do repositório + show_repository = GetByGrupoRepository() + + # Execução do repositório + response = show_repository.execute(marcacao_tipo_schema) + + # Retorno da informação + return response \ No newline at end of file diff --git a/packages/v1/administrativo/controllers/g_marcacao_tipo_controller.py b/packages/v1/administrativo/controllers/g_marcacao_tipo_controller.py index c4826f7..8ea8211 100644 --- a/packages/v1/administrativo/controllers/g_marcacao_tipo_controller.py +++ b/packages/v1/administrativo/controllers/g_marcacao_tipo_controller.py @@ -4,7 +4,8 @@ from packages.v1.administrativo.schemas.g_marcacao_tipo_schema import ( GMarcacaoTipoSaveSchema, GMarcacaoTipoUpdateSchema, GMarcacaoTipoIdSchema, - GMarcacaoTipoDescricaoSchema + GMarcacaoTipoDescricaoSchema, + GMarcacaoTipoGrupoSchema ) class GMarcacaoTipoController: @@ -110,4 +111,20 @@ class GMarcacaoTipoController: return { 'message': 'Registro de marcação tipo removido com sucesso', 'data': self.delete_service.execute(marcacao_tipo_schema) - } \ No newline at end of file + } + + + # Busca um registro de marcacao tipo por filtro + def get_by_grupo(self, marcacao_tipo_schema: GMarcacaoTipoGrupoSchema): + + #Importação da classe desejada + grupo_service = self.dynamic_import.service('g_marcacao_tipo_get_by_grupo_service', 'GetByGrupoService') + + # Instância da classe desejada + self.grupo_service = grupo_service() + + # Busca e retorna o registro de marcacao tipo desejado + return { + 'message': 'Registro de marcação tipo localizado com sucesso', + 'data': self.grupo_service.execute(marcacao_tipo_schema, True) + } \ No newline at end of file diff --git a/packages/v1/administrativo/endpoints/g_marcacao_tipo_endpoint.py b/packages/v1/administrativo/endpoints/g_marcacao_tipo_endpoint.py index 0e8d88a..6b5ae67 100644 --- a/packages/v1/administrativo/endpoints/g_marcacao_tipo_endpoint.py +++ b/packages/v1/administrativo/endpoints/g_marcacao_tipo_endpoint.py @@ -7,7 +7,8 @@ from packages.v1.administrativo.schemas.g_marcacao_tipo_schema import ( GMarcacaoTipoSchema, GMarcacaoTipoSaveSchema, GMarcacaoTipoUpdateSchema, - GMarcacaoTipoIdSchema + GMarcacaoTipoIdSchema, + GMarcacaoTipoGrupoSchema ) # Inicializa o roteador para as rotas do tipo de marcação @@ -47,6 +48,23 @@ async def get_by_descricao(descricao : str, current_user: dict = Depends(get_cur return response +# Localiza um registro de marcação tipo passando os filtros de consulta +@router.get('/grupo', + status_code=status.HTTP_200_OK, + summary='Busca um registro de marcação tipo em específico pela descrição', + response_description='Busca um registro de marcação tipo em específico') +async def get_by_descricao(grupo : str, sistema_id : int, situacao : str, current_user: dict = Depends(get_current_user)): + + # Cria o schema com os dados recebidos. Nota: Assumindo que GMarcacaoTipoSchema pode ser usado para descrição. + marcacao_tipo_schema = GMarcacaoTipoGrupoSchema(grupo=grupo, sistema_id=sistema_id, situacao=situacao) + + # Busca um registro de marcação tipo específico pela descrição + response = g_marcacao_tipo_controller.get_by_grupo(marcacao_tipo_schema) + + # Retorna os dados localizados + return response + + # Localiza um registro de marcação tipo pelo ID @router.get('/{marcacao_tipo_id}', status_code=status.HTTP_200_OK, @@ -63,7 +81,6 @@ async def show(marcacao_tipo_id : int, current_user: dict = Depends(get_current_ # Retorna os dados localizados return response - # Cadastro de registro de marcação tipo @router.post('/', status_code=status.HTTP_201_CREATED, diff --git a/packages/v1/administrativo/repositories/g_marcacao_tipo/g_marcacao_tipo_get_by_grupo_repository.py b/packages/v1/administrativo/repositories/g_marcacao_tipo/g_marcacao_tipo_get_by_grupo_repository.py new file mode 100644 index 0000000..e2b0ac7 --- /dev/null +++ b/packages/v1/administrativo/repositories/g_marcacao_tipo/g_marcacao_tipo_get_by_grupo_repository.py @@ -0,0 +1,52 @@ +from abstracts.repository import BaseRepository +# O schema de entrada deve ser o de descrição para a tabela G_MARCACAO_TIPO +from packages.v1.administrativo.schemas.g_marcacao_tipo_schema import GMarcacaoTipoGrupoSchema + +class GetByGrupoRepository(BaseRepository): + """ + Repositório para a operação de busca de um registro na tabela + G_MARCACAO_TIPO por descrição. + """ + + def execute(self, marcacao_tipo_schema: GMarcacaoTipoGrupoSchema): + """ + Executa a consulta SQL para buscar um registro pela descrição. + + Args: + marcacao_tipo_schema (GMarcacaoTipoGrupoSchema): O esquema com os filtros a serem consultados. + + Returns: + Um dicionário contendo os dados do registro ou None se não for encontrado. + """ + # Montagem do SQL + sql = """ SELECT MARCACAO_TIPO_ID, + DESCRICAO, + NOME, + GRUPO, + SITUACAO, + SISTEMA_ID, + GRUPO_TIPO, + TIPO_QUALIFICACAO, + CONDICAO_SQL, + SEPARADOR_1, + SEPARADOR_2, + SEPARADOR_3, + TIPO_VALOR, + ATUALIZAR, + PROTEGIDA, + ATIVAR_SEPARADOR, + SQL_COMPLETO + FROM G_MARCACAO_TIPO + WHERE GRUPO = :grupo AND + SISTEMA_ID = :sistema_id AND + SITUACAO = :situacao """ + + # Preenchimento de parâmetros + params = { + 'grupo': marcacao_tipo_schema.grupo, + 'sistema_id': marcacao_tipo_schema.sistema_id, + 'situacao': marcacao_tipo_schema.situacao + } + + # Execução do sql + return self.fetch_all(sql, params) \ No newline at end of file diff --git a/packages/v1/administrativo/schemas/g_marcacao_tipo_schema.py b/packages/v1/administrativo/schemas/g_marcacao_tipo_schema.py index 65ff35d..59201c3 100644 --- a/packages/v1/administrativo/schemas/g_marcacao_tipo_schema.py +++ b/packages/v1/administrativo/schemas/g_marcacao_tipo_schema.py @@ -54,7 +54,16 @@ class GMarcacaoTipoIdSchema(BaseModel): # Schema para localizar um registro pela descrição (GET) # ---------------------------------------------------- class GMarcacaoTipoDescricaoSchema(BaseModel): - descricao: str + descricao: str + + +# ---------------------------------------------------- +# Schema para localizar um registro por filtro (GET) +# ---------------------------------------------------- +class GMarcacaoTipoGrupoSchema(BaseModel): + grupo: str + sistema_id: int + situacao: str # ---------------------------------------------------- diff --git a/packages/v1/administrativo/services/g_marcacao_tipo/go/g_marcacao_tipo_get_by_grupo_service.py b/packages/v1/administrativo/services/g_marcacao_tipo/go/g_marcacao_tipo_get_by_grupo_service.py new file mode 100644 index 0000000..575e663 --- /dev/null +++ b/packages/v1/administrativo/services/g_marcacao_tipo/go/g_marcacao_tipo_get_by_grupo_service.py @@ -0,0 +1,38 @@ +from fastapi import HTTPException, status +from packages.v1.administrativo.schemas.g_marcacao_tipo_schema import GMarcacaoTipoGrupoSchema +from packages.v1.administrativo.actions.g_marcacao_tipo.g_marcacao_tipo_get_by_grupo_action import GetByGrupoAction + +class GetByGrupoService: + """ + Serviço responsável por encapsular a lógica de negócio para a operação + de busca de um registro na tabela G_MARCACAO_TIPO pela sua descrição. + """ + + def execute(self, marcacao_tipo_schema: GMarcacaoTipoGrupoSchema, messageValidate: bool): + """ + Executa a operação de busca no banco de dados. + + Args: + marcacao_tipo_schema (GMarcacaoTipoGrupoSchema): O esquema com a descrição a ser buscada. + messageValidate (bool): Se True, lança uma exceção HTTP caso o registro não seja encontrado. + + Returns: + O registro encontrado ou None. + """ + # Instanciamento da ação + show_action = GetByGrupoAction() + + # Executa a ação em questão + data = show_action.execute(marcacao_tipo_schema) + + if messageValidate: + + if not data: + # Retorna uma exceção + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail='Não foi possível localizar o registro de G_MARCACAO_TIPO' + ) + + # Retorno da informação + return data \ No newline at end of file