diff --git a/.gitignore b/.gitignore index 5c262bc..f64a998 100644 --- a/.gitignore +++ b/.gitignore @@ -38,4 +38,8 @@ src/main/resources/http desktop.ini Desktop.ini -src/main/resources/firebase/ \ No newline at end of file +src/main/resources/firebase/ +skills/ + +*.env +*.json \ No newline at end of file diff --git a/src/main/java/br/com/acta/common/config/firebase/FirebaseAuthFilter.java b/src/main/java/br/com/acta/common/config/firebase/FirebaseAuthFilter.java index 785a757..0db1406 100644 --- a/src/main/java/br/com/acta/common/config/firebase/FirebaseAuthFilter.java +++ b/src/main/java/br/com/acta/common/config/firebase/FirebaseAuthFilter.java @@ -25,7 +25,7 @@ @RequiredArgsConstructor public class FirebaseAuthFilter extends OncePerRequestFilter { - private static final String AUTH = "/auth/ativar"; + private static final String AUTH = "/api/v1/auth/ativar"; private final FirebaseUtils utils; private final ObjectMapper mapper; diff --git a/src/main/java/br/com/acta/common/config/swagger/annotation/ApiAuthenticationResponses.java b/src/main/java/br/com/acta/common/config/swagger/annotation/ApiAuthenticationResponses.java new file mode 100644 index 0000000..9ef35d5 --- /dev/null +++ b/src/main/java/br/com/acta/common/config/swagger/annotation/ApiAuthenticationResponses.java @@ -0,0 +1,31 @@ +package br.com.acta.common.config.swagger.annotation; + +import br.com.acta.common.config.swagger.examples.SwaggerResponseExamples; +import br.com.acta.common.handler.ErroResponse; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.ExampleObject; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@ApiResponses({ + @ApiResponse( + responseCode = "401", + description = "ID Token do Firebase ausente ou inválido", + content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErroResponse.class), examples = @ExampleObject(value = SwaggerResponseExamples.ERRO_401)) + ), + @ApiResponse( + responseCode = "403", + description = "Usuário sem permissão para acessar o recurso", + content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErroResponse.class), examples = @ExampleObject(value = SwaggerResponseExamples.ERRO_403)) + ) +}) +public @interface ApiAuthenticationResponses { +} diff --git a/src/main/java/br/com/acta/common/config/swagger/annotation/ApiBadRequestResponse.java b/src/main/java/br/com/acta/common/config/swagger/annotation/ApiBadRequestResponse.java new file mode 100644 index 0000000..08e51eb --- /dev/null +++ b/src/main/java/br/com/acta/common/config/swagger/annotation/ApiBadRequestResponse.java @@ -0,0 +1,23 @@ +package br.com.acta.common.config.swagger.annotation; + +import br.com.acta.common.config.swagger.examples.SwaggerResponseExamples; +import br.com.acta.common.handler.ErroResponse; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.ExampleObject; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@ApiResponse( + responseCode = "400", + description = "Requisição inválida", + content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErroResponse.class), examples = @ExampleObject(value = SwaggerResponseExamples.ERRO_400)) +) +public @interface ApiBadRequestResponse { +} diff --git a/src/main/java/br/com/acta/common/config/swagger/annotation/ApiBusinessRuleResponse.java b/src/main/java/br/com/acta/common/config/swagger/annotation/ApiBusinessRuleResponse.java new file mode 100644 index 0000000..06eefc1 --- /dev/null +++ b/src/main/java/br/com/acta/common/config/swagger/annotation/ApiBusinessRuleResponse.java @@ -0,0 +1,23 @@ +package br.com.acta.common.config.swagger.annotation; + +import br.com.acta.common.config.swagger.examples.SwaggerResponseExamples; +import br.com.acta.common.handler.ErroResponse; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.ExampleObject; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@ApiResponse( + responseCode = "422", + description = "Regra de negócio não atendida", + content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErroResponse.class), examples = @ExampleObject(value = SwaggerResponseExamples.ERRO_422)) +) +public @interface ApiBusinessRuleResponse { +} diff --git a/src/main/java/br/com/acta/common/config/swagger/annotation/ApiConflictResponse.java b/src/main/java/br/com/acta/common/config/swagger/annotation/ApiConflictResponse.java new file mode 100644 index 0000000..e49a633 --- /dev/null +++ b/src/main/java/br/com/acta/common/config/swagger/annotation/ApiConflictResponse.java @@ -0,0 +1,23 @@ +package br.com.acta.common.config.swagger.annotation; + +import br.com.acta.common.config.swagger.examples.SwaggerResponseExamples; +import br.com.acta.common.handler.ErroResponse; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.ExampleObject; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@ApiResponse( + responseCode = "409", + description = "Conflito com os dados existentes", + content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErroResponse.class), examples = @ExampleObject(value = SwaggerResponseExamples.ERRO_409)) +) +public @interface ApiConflictResponse { +} diff --git a/src/main/java/br/com/acta/common/config/swagger/annotation/ApiNotFoundResponse.java b/src/main/java/br/com/acta/common/config/swagger/annotation/ApiNotFoundResponse.java new file mode 100644 index 0000000..d5b1184 --- /dev/null +++ b/src/main/java/br/com/acta/common/config/swagger/annotation/ApiNotFoundResponse.java @@ -0,0 +1,23 @@ +package br.com.acta.common.config.swagger.annotation; + +import br.com.acta.common.config.swagger.examples.SwaggerResponseExamples; +import br.com.acta.common.handler.ErroResponse; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.ExampleObject; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@ApiResponse( + responseCode = "404", + description = "Recurso não encontrado", + content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErroResponse.class), examples = @ExampleObject(value = SwaggerResponseExamples.ERRO_404)) +) +public @interface ApiNotFoundResponse { +} diff --git a/src/main/java/br/com/acta/common/config/swagger/annotation/ApiResourceResponses.java b/src/main/java/br/com/acta/common/config/swagger/annotation/ApiResourceResponses.java new file mode 100644 index 0000000..712a68d --- /dev/null +++ b/src/main/java/br/com/acta/common/config/swagger/annotation/ApiResourceResponses.java @@ -0,0 +1,15 @@ +package br.com.acta.common.config.swagger.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@ApiAuthenticationResponses +@ApiBadRequestResponse +@ApiNotFoundResponse +@ApiConflictResponse +public @interface ApiResourceResponses { +} \ No newline at end of file diff --git a/src/main/java/br/com/acta/common/config/swagger/annotation/ApiUnsupportedMediaTypeResponse.java b/src/main/java/br/com/acta/common/config/swagger/annotation/ApiUnsupportedMediaTypeResponse.java new file mode 100644 index 0000000..a521a7f --- /dev/null +++ b/src/main/java/br/com/acta/common/config/swagger/annotation/ApiUnsupportedMediaTypeResponse.java @@ -0,0 +1,23 @@ +package br.com.acta.common.config.swagger.annotation; + +import br.com.acta.common.config.swagger.examples.SwaggerResponseExamples; +import br.com.acta.common.handler.ErroResponse; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.ExampleObject; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@ApiResponse( + responseCode = "415", + description = "Tipo de conteúdo enviado não suportado", + content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErroResponse.class), examples = @ExampleObject(value = SwaggerResponseExamples.ERRO_415)) +) +public @interface ApiUnsupportedMediaTypeResponse { +} diff --git a/src/main/java/br/com/acta/common/config/swagger/examples/SwaggerOpenapiDescriptions.java b/src/main/java/br/com/acta/common/config/swagger/examples/SwaggerOpenapiDescriptions.java index 76a4589..862339b 100644 --- a/src/main/java/br/com/acta/common/config/swagger/examples/SwaggerOpenapiDescriptions.java +++ b/src/main/java/br/com/acta/common/config/swagger/examples/SwaggerOpenapiDescriptions.java @@ -1,6 +1,235 @@ package br.com.acta.common.config.swagger.examples; public final class SwaggerOpenapiDescriptions { + public static final String AUTH_CONTROLLER = """ + Endpoints responsáveis pela autenticação e ativação de usuários. + + A API permite: + + - Consultar os dados do usuário autenticado; + - Ativar um usuário a partir de uma identidade do Firebase. + """; + + public static final String HEALTH_CONTROLLER = """ + Endpoint responsável por verificar a disponibilidade da API e do banco de dados. + + A verificação informa se a aplicação está disponível e se a conexão com o banco de dados está funcionando. + """; + + public static final String USUARIO_CONTROLLER = """ + Endpoints responsáveis pelo gerenciamento de usuários. + + A API permite: + + - Criar e consultar usuários; + - Filtrar usuários por empresa e tipo; + - Consultar os ciclos de um usuário; + - Atualizar dados e remover a foto de perfil; + - Inativar um usuário. + """; + + public static final String EMPRESA_CONTROLLER = """ + Endpoints responsáveis pelo gerenciamento de empresas. + + A API permite: + + - Criar e consultar empresas; + - Filtrar empresas por tamanho; + - Atualizar parcialmente os dados de uma empresa; + - Inativar uma empresa. + """; + + public static final String COLABORADOR_CONTROLLER = """ + Endpoints responsáveis pelo gerenciamento de colaboradores. + + A API permite: + + - Criar e consultar colaboradores; + - Consultar colaboradores de uma empresa; + - Atualizar parcialmente os dados de um colaborador; + - Inativar um colaborador. + """; + + public static final String TAREFA_CONTROLLER = """ + Endpoints responsáveis pelo gerenciamento de tarefas dos planos de ação. + + A API permite: + + - Criar e consultar tarefas; + - Filtrar tarefas por status, responsável e prioridade; + - Atualizar dados e status; + - Reabrir e reatribuir tarefas; + - Excluir tarefas. + """; + + public static final String META_CONTROLLER = """ + Endpoints responsáveis pelo gerenciamento de metas do ciclo PDCA. + + A API permite: + + - Criar e consultar metas; + - Filtrar metas por ciclo, status e prioridade; + - Atualizar dados e status; + - Gerenciar os responsáveis por uma meta; + - Excluir metas. + """; + + public static final String PLANO_ACAO_CONTROLLER = """ + Endpoints responsáveis pelo gerenciamento dos planos de ação de um ciclo PDCA. + + A API permite: + + - Criar e consultar planos de ação; + - Filtrar planos por ciclo, status e prioridade; + - Atualizar dados e status; + - Excluir planos de ação. + """; + + public static final String PROBLEMA_CONTROLLER = """ + Endpoints responsáveis pelo gerenciamento de problemas dos ciclos PDCA. + + A API permite: + + - Criar e consultar problemas; + - Filtrar problemas por ciclo, status e problema pai; + - Atualizar dados e status; + - Excluir problemas. + """; + + public static final String CAUSA_RAIZ_CONTROLLER = """ + Endpoints responsáveis pelo gerenciamento das causas-raiz dos ciclos PDCA. + + A API permite: + + - Criar e consultar causas-raiz; + - Filtrar causas por ciclo, problema, aceite e indicação principal; + - Atualizar e validar causas-raiz; + - Excluir causas-raiz. + """; + + public static final String PLANO_5W2H_CONTROLLER = """ + Endpoints responsáveis pelo gerenciamento do plano 5W2H de um plano de ação. + + A API permite: + + - Criar e consultar um plano 5W2H; + - Atualizar parcialmente os dados do plano; + - Excluir o plano 5W2H. + """; + + public static final String USUARIO_CICLO_CONTROLLER = """ + Endpoints responsáveis pelo vínculo entre usuários e ciclos PDCA. + + A API permite: + + - Consultar os usuários de um ciclo; + - Adicionar e remover usuários; + - Alterar o papel de um usuário no ciclo; + - Substituir o responsável pelo ciclo. + """; + + public static final String PRIORIZACAO_PROBLEMA_CONTROLLER = """ + Endpoints responsáveis pela priorização de problemas. + + A API permite: + + - Consultar e registrar priorizações; + - Atualizar os critérios de uma priorização; + - Aplicar o peso calculado ao problema. + """; + + public static final String TAREFA_DEPENDENTE_CONTROLLER = """ + Endpoints responsáveis pelas dependências entre tarefas. + + A API permite: + + - Consultar as dependências de uma tarefa; + - Adicionar uma tarefa dependente; + - Remover uma dependência. + """; + + public static final String USUARIO_TREINAMENTO_CONTROLLER = """ + Endpoints responsáveis pelo vínculo entre usuários e treinamentos. + + A API permite: + + - Consultar os usuários de um treinamento; + - Vincular usuários; + - Atualizar o status do vínculo; + - Remover usuários do treinamento. + """; + + public static final String TREINAMENTO_CONTROLLER = """ + Endpoints responsáveis pelo gerenciamento de treinamentos dos ciclos PDCA. + + A API permite: + + - Criar e consultar treinamentos; + - Consultar os treinamentos de um ciclo; + - Atualizar parcialmente os dados; + - Excluir treinamentos. + """; + + public static final String VERIFICACAO_RESULTADO_CONTROLLER = """ + Endpoints responsáveis pelo registro e acompanhamento das verificações de resultado. + + A API permite: + + - Criar e consultar verificações; + - Consultar as verificações de um ciclo; + - Atualizar parcialmente os resultados; + - Excluir verificações. + """; + + public static final String EFEITO_SECUNDARIO_CONTROLLER = """ + Endpoints responsáveis pelos efeitos secundários de uma verificação de resultado. + + A API permite: + + - Criar e consultar efeitos secundários; + - Atualizar parcialmente os efeitos; + - Excluir efeitos secundários. + """; + + public static final String ALERTA_PRAZO_CONTROLLER = """ + Endpoints responsáveis pelos alertas de prazo das tarefas. + + A API permite: + + - Consultar o alerta de uma tarefa; + - Marcar um alerta como lido. + """; + + public static final String ENDERECO_EMPRESA_CONTROLLER = """ + Endpoints responsáveis pelos endereços das empresas. + + A API permite: + + - Consultar os endereços de uma empresa; + - Adicionar um endereço; + - Excluir um endereço. + """; + + public static final String EMAIL_CONTROLLER = """ + Endpoints responsáveis pelos e-mails de empresas e colaboradores. + + A API permite: + + - Consultar e-mails; + - Adicionar e-mails; + - Excluir e-mails de empresas e colaboradores. + """; + + public static final String TELEFONE_CONTROLLER = """ + Endpoints responsáveis pelos telefones de empresas e colaboradores. + + A API permite: + + - Consultar telefones; + - Adicionar telefones; + - Excluir telefones de empresas e colaboradores. + """; + public static final String CICLO_CONTROLLER = """ Endpoints responsáveis pelo gerenciamento dos ciclos PDCA. @@ -17,6 +246,4 @@ public final class SwaggerOpenapiDescriptions { (* Algumas operações dependem do status atual do ciclo. Ciclos encerrados, concluídos ou cancelados podem ter sua alteração bloqueada pelas regras de negócio) """; - - } diff --git a/src/main/java/br/com/acta/common/config/swagger/examples/SwaggerParameterDescriptions.java b/src/main/java/br/com/acta/common/config/swagger/examples/SwaggerParameterDescriptions.java new file mode 100644 index 0000000..8d42d4b --- /dev/null +++ b/src/main/java/br/com/acta/common/config/swagger/examples/SwaggerParameterDescriptions.java @@ -0,0 +1,62 @@ +package br.com.acta.common.config.swagger.examples; + +public final class SwaggerParameterDescriptions { + public static final String ID_ALERTA = "ID do alerta de prazo"; + public static final String ID_CAUSA_RAIZ = "ID da causa-raiz"; + public static final String ID_CICLO = "ID do ciclo"; + public static final String ID_COLABORADOR = "ID do colaborador"; + public static final String ID_EFEITO_SECUNDARIO = "ID do efeito secundário"; + public static final String ID_EMAIL = "ID do e-mail"; + public static final String ID_EMPRESA = "ID da empresa"; + public static final String ID_ENDERECO = "ID do endereço"; + public static final String ID_META = "ID da meta"; + public static final String ID_PLANO_5W2H = "ID do plano 5W2H"; + public static final String ID_PLANO_ACAO = "ID do plano de ação"; + public static final String ID_PROBLEMA = "ID do problema"; + public static final String ID_RESULTADO = "ID da verificação de resulta0do"; + public static final String ID_TAREFA = "ID da tarefa"; + public static final String ID_TELEFONE = "ID do telefone"; + public static final String ID_TREINAMENTO = "ID do treinamento"; + public static final String ID_USUARIO = "ID do usuário"; + public static final String ID_CRIADO_POR = "ID do usuário responsável pela criação"; + public static final String ID_DEPENDENTE = "ID da tarefa dependente"; + public static final String ID_GESTOR = "ID do gestor usado para filtrar os ciclos"; + public static final String ID_PROBLEMA_PAI = "ID do problema pai usado no filtro"; + public static final String ID_RESPONSAVEL = "ID do responsável"; + public static final String IDS_RESPONSAVEIS = "IDs dos responsáveis pela meta"; + public static final String ID_USUARIO_ANTIGO = "ID do usuário que deixará de ser responsável pelo ciclo"; + public static final String ID_USUARIO_NOVO = "ID do novo responsável pelo ciclo"; + + public static final String FILTRO_ACEITA = "Filtra pelo aceite da causa-raiz"; + public static final String FILTRO_ID_EMPRESA = "ID da empresa usado no filtro"; + public static final String FILTRO_ID_PROBLEMA = "ID do problema usado no filtro"; + public static final String FILTRO_ID_RESPONSAVEL = "ID do responsável usado no filtro"; + public static final String FILTRO_ID_USUARIO = "ID do usuário usado no filtro"; + public static final String FILTRO_PRINCIPAL = "Filtra pela indicação de causa-raiz principal"; + public static final String FILTRO_PRIORIDADE = "Filtra pela prioridade"; + public static final String FILTRO_STATUS = "Filtra pelo status"; + public static final String NOVO_STATUS = "Novo status do recurso"; + public static final String ACEITA_CAUSA_RAIZ = "Indica se a causa-raiz foi aceita"; + public static final String NOVO_PRAZO = "Novo prazo da tarefa reaberta"; + public static final String PAPEL_CICLO = "Novo papel do usuário no ciclo"; + public static final String TAMANHO_EMPRESA = "Filtra as empresas pelo tamanho"; + public static final String TIPO_USUARIO = "Filtra os usuários pelo tipo"; + + public static final String CAMPOS_CAUSA_RAIZ = "Campos da causa-raiz a serem atualizados"; + public static final String CAMPOS_CICLO = "Campos do ciclo a serem atualizados"; + public static final String CAMPOS_COLABORADOR = "Campos do colaborador a serem atualizados"; + public static final String CAMPOS_EFEITO_SECUNDARIO = "Campos do efeito secundário a serem atualizados"; + public static final String CAMPOS_EMPRESA = "Campos da empresa a serem atualizados"; + public static final String CAMPOS_META = "Campos da meta a serem atualizados"; + public static final String CAMPOS_PLANO_5W2H = "Campos do plano 5W2H a serem atualizados"; + public static final String CAMPOS_PLANO_ACAO = "Campos do plano de ação a serem atualizados"; + public static final String CAMPOS_PRIORIZACAO = "Campos da priorização a serem atualizados"; + public static final String CAMPOS_PROBLEMA = "Campos do problema a serem atualizados"; + public static final String CAMPOS_TAREFA = "Campos da tarefa a serem atualizados"; + public static final String CAMPOS_TREINAMENTO = "Campos do treinamento a serem atualizados"; + public static final String CAMPOS_USUARIO = "Campos do usuário a serem atualizados"; + public static final String CAMPOS_VERIFICACAO = "Campos da verificação de resultado a serem atualizados"; + + private SwaggerParameterDescriptions() { + } +} diff --git a/src/main/java/br/com/acta/common/config/swagger/examples/SwaggerResponseExamples.java b/src/main/java/br/com/acta/common/config/swagger/examples/SwaggerResponseExamples.java index fc0b741..199c5ce 100644 --- a/src/main/java/br/com/acta/common/config/swagger/examples/SwaggerResponseExamples.java +++ b/src/main/java/br/com/acta/common/config/swagger/examples/SwaggerResponseExamples.java @@ -11,6 +11,26 @@ public final class SwaggerResponseExamples { } """; + public static final String ERRO_401 = """ + { + "mensagens": [ + "ID Token do Firebase ausente ou inválido" + ], + "httpStatus": 401, + "timestamp": "2026-08-06T12:07:00" + } + """; + + public static final String ERRO_403 = """ + { + "mensagens": [ + "Usuário sem permissão para acessar o recurso" + ], + "httpStatus": 403, + "timestamp": "2026-08-06T12:07:00" + } + """; + public static final String ERRO_404 = """ { "mensagens": [ @@ -30,4 +50,24 @@ public final class SwaggerResponseExamples { "timestamp": "2026-08-06T12:07:00" } """; + + public static final String ERRO_415 = """ + { + "mensagens": [ + "Tipo de conteúdo enviado não suportado" + ], + "httpStatus": 415, + "timestamp": "2026-08-06T12:07:00" + } + """; + + public static final String ERRO_422 = """ + { + "mensagens": [ + "Regra de negócio não atendida" + ], + "httpStatus": 422, + "timestamp": "2026-08-06T12:07:00" + } + """; } \ No newline at end of file diff --git a/src/main/java/br/com/acta/common/config/swagger/openapi/AlertaPrazoOpenapi.java b/src/main/java/br/com/acta/common/config/swagger/openapi/AlertaPrazoOpenapi.java new file mode 100644 index 0000000..b78455c --- /dev/null +++ b/src/main/java/br/com/acta/common/config/swagger/openapi/AlertaPrazoOpenapi.java @@ -0,0 +1,34 @@ +package br.com.acta.common.config.swagger.openapi; + +import br.com.acta.common.config.swagger.annotation.ApiAuthenticationResponses; +import br.com.acta.common.config.swagger.annotation.ApiResourceResponses; +import br.com.acta.common.config.swagger.annotation.ApiBadRequestResponse; +import br.com.acta.common.config.swagger.annotation.ApiBusinessRuleResponse; +import br.com.acta.common.config.swagger.annotation.ApiNotFoundResponse; +import br.com.acta.common.config.swagger.examples.SwaggerOpenapiDescriptions; +import br.com.acta.common.config.swagger.examples.SwaggerParameterDescriptions; +import br.com.acta.dto.pdca.alerta_prazo.AlertaPrazoResponseDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.http.ResponseEntity; + +@Tag(name = "Alertas de prazo", description = SwaggerOpenapiDescriptions.ALERTA_PRAZO_CONTROLLER) +public interface AlertaPrazoOpenapi { + + @Operation(summary = "Busca o alerta de prazo de uma tarefa") + @ApiResponse(responseCode = "200", description = "Alerta encontrado", content = @Content(schema = @Schema(implementation = AlertaPrazoResponseDTO.class))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + @ApiNotFoundResponse + ResponseEntity buscar(@Parameter(description = SwaggerParameterDescriptions.ID_TAREFA) Long idTarefa); + + @Operation(summary = "Marca um alerta como lido") + @ApiResponse(responseCode = "200", description = "Alerta marcado como lido", content = @Content(schema = @Schema(implementation = AlertaPrazoResponseDTO.class))) + @ApiResourceResponses + @ApiBusinessRuleResponse + ResponseEntity marcarLido(@Parameter(description = SwaggerParameterDescriptions.ID_TAREFA) Long idTarefa, @Parameter(description = SwaggerParameterDescriptions.ID_ALERTA) Long id, @Parameter(description = SwaggerParameterDescriptions.ID_USUARIO) Long idUsuario); +} diff --git a/src/main/java/br/com/acta/common/config/swagger/openapi/AuthOpenapi.java b/src/main/java/br/com/acta/common/config/swagger/openapi/AuthOpenapi.java new file mode 100644 index 0000000..010ec2e --- /dev/null +++ b/src/main/java/br/com/acta/common/config/swagger/openapi/AuthOpenapi.java @@ -0,0 +1,32 @@ +package br.com.acta.common.config.swagger.openapi; + +import br.com.acta.common.config.firebase.FirebaseAuthFilter.FirebaseIdentity; +import br.com.acta.common.config.firebase.UsuarioAutenticado; +import br.com.acta.common.config.swagger.annotation.ApiAuthenticationResponses; +import br.com.acta.common.config.swagger.annotation.ApiConflictResponse; +import br.com.acta.common.config.swagger.annotation.ApiNotFoundResponse; +import br.com.acta.common.config.swagger.examples.SwaggerOpenapiDescriptions; +import br.com.acta.dto.auth.MeResponseDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.http.ResponseEntity; + +@Tag(name = "Autenticação", description = SwaggerOpenapiDescriptions.AUTH_CONTROLLER) +public interface AuthOpenapi { + + @Operation(summary = "Consulta o usuário autenticado") + @ApiResponse(responseCode = "200", description = "Usuário autenticado", content = @Content(schema = @Schema(implementation = MeResponseDTO.class))) + @ApiAuthenticationResponses + ResponseEntity me(@Parameter(hidden = true) UsuarioAutenticado usuario); + + @Operation(summary = "Ativa o usuário autenticado") + @ApiResponse(responseCode = "200", description = "Usuário ativado", content = @Content(schema = @Schema(implementation = MeResponseDTO.class))) + @ApiAuthenticationResponses + @ApiNotFoundResponse + @ApiConflictResponse + ResponseEntity ativar(@Parameter(hidden = true) FirebaseIdentity identity); +} diff --git a/src/main/java/br/com/acta/common/config/swagger/openapi/CausaRaizOpenapi.java b/src/main/java/br/com/acta/common/config/swagger/openapi/CausaRaizOpenapi.java new file mode 100644 index 0000000..9f46a25 --- /dev/null +++ b/src/main/java/br/com/acta/common/config/swagger/openapi/CausaRaizOpenapi.java @@ -0,0 +1,65 @@ +package br.com.acta.common.config.swagger.openapi; + +import br.com.acta.common.config.swagger.annotation.ApiAuthenticationResponses; +import br.com.acta.common.config.swagger.annotation.ApiResourceResponses; +import br.com.acta.common.config.swagger.annotation.ApiBadRequestResponse; +import br.com.acta.common.config.swagger.annotation.ApiBusinessRuleResponse; +import br.com.acta.common.config.swagger.annotation.ApiNotFoundResponse; +import br.com.acta.common.config.swagger.annotation.ApiUnsupportedMediaTypeResponse; +import br.com.acta.common.config.swagger.examples.SwaggerOpenapiDescriptions; +import br.com.acta.common.config.swagger.examples.SwaggerParameterDescriptions; +import br.com.acta.dto.pdca.causa_raiz.CausaRaizRequestDTO; +import br.com.acta.dto.pdca.causa_raiz.CausaRaizResponseDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.parameters.RequestBody; +import org.springframework.http.ResponseEntity; + +import java.util.List; +import java.util.Map; + +@Tag(name = "Causas-raiz", description = SwaggerOpenapiDescriptions.CAUSA_RAIZ_CONTROLLER) +public interface CausaRaizOpenapi { + + @Operation(summary = "Lista as causas-raiz de um ciclo") + @ApiResponse(responseCode = "200", description = "Causas-raiz encontradas", content = @Content(array = @ArraySchema(schema = @Schema(implementation = CausaRaizResponseDTO.class)))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + ResponseEntity> buscar(@Parameter(description = SwaggerParameterDescriptions.ID_CICLO) Long idCiclo, @Parameter(description = SwaggerParameterDescriptions.FILTRO_ACEITA) Boolean aceita, @Parameter(description = SwaggerParameterDescriptions.FILTRO_PRINCIPAL) Boolean principal, @Parameter(description = SwaggerParameterDescriptions.FILTRO_ID_PROBLEMA) Long idProblema); + + @Operation(summary = "Busca uma causa-raiz") + @ApiResponse(responseCode = "200", description = "Causa-raiz encontrada", content = @Content(schema = @Schema(implementation = CausaRaizResponseDTO.class))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + @ApiNotFoundResponse + ResponseEntity buscar(@Parameter(description = SwaggerParameterDescriptions.ID_CAUSA_RAIZ) Long id); + + @Operation(summary = "Cria uma causa-raiz") + @ApiResponse(responseCode = "201", description = "Causa-raiz criada", content = @Content(schema = @Schema(implementation = CausaRaizResponseDTO.class))) + @ApiResourceResponses + @ApiBusinessRuleResponse + @ApiUnsupportedMediaTypeResponse + ResponseEntity inserir(@Parameter(description = SwaggerParameterDescriptions.ID_CICLO) Long idCiclo, @RequestBody(description = "Dados da causa-raiz", required = true) CausaRaizRequestDTO dto); + + @Operation(summary = "Atualiza parcialmente uma causa-raiz") + @ApiResponse(responseCode = "200", description = "Causa-raiz atualizada", content = @Content(schema = @Schema(implementation = CausaRaizResponseDTO.class))) + @ApiResourceResponses + @ApiUnsupportedMediaTypeResponse + ResponseEntity patch(@Parameter(description = SwaggerParameterDescriptions.ID_CAUSA_RAIZ) Long id, @RequestBody(description = SwaggerParameterDescriptions.CAMPOS_CAUSA_RAIZ, required = true) Map campos); + + @Operation(summary = "Valida uma causa-raiz") + @ApiResponse(responseCode = "200", description = "Causa-raiz validada", content = @Content(schema = @Schema(implementation = CausaRaizResponseDTO.class))) + @ApiResourceResponses + @ApiBusinessRuleResponse + ResponseEntity validar(@Parameter(description = SwaggerParameterDescriptions.ID_CAUSA_RAIZ) Long id, @Parameter(description = SwaggerParameterDescriptions.ID_USUARIO) Long idUsuario, @Parameter(description = SwaggerParameterDescriptions.ACEITA_CAUSA_RAIZ) Boolean aceita); + + @Operation(summary = "Exclui uma causa-raiz") + @ApiResponse(responseCode = "204", description = "Causa-raiz excluída") + @ApiResourceResponses + ResponseEntity excluir(@Parameter(description = SwaggerParameterDescriptions.ID_CAUSA_RAIZ) Long id); +} diff --git a/src/main/java/br/com/acta/common/config/swagger/openapi/CicloOpenapi.java b/src/main/java/br/com/acta/common/config/swagger/openapi/CicloOpenapi.java new file mode 100644 index 0000000..61061b3 --- /dev/null +++ b/src/main/java/br/com/acta/common/config/swagger/openapi/CicloOpenapi.java @@ -0,0 +1,73 @@ +package br.com.acta.common.config.swagger.openapi; + +import br.com.acta.common.config.swagger.annotation.ApiAuthenticationResponses; +import br.com.acta.common.config.swagger.annotation.ApiResourceResponses; +import br.com.acta.common.config.swagger.annotation.ApiBadRequestResponse; +import br.com.acta.common.config.swagger.annotation.ApiBusinessRuleResponse; +import br.com.acta.common.config.swagger.annotation.ApiNotFoundResponse; +import br.com.acta.common.config.swagger.annotation.ApiUnsupportedMediaTypeResponse; +import br.com.acta.common.config.swagger.examples.SwaggerOpenapiDescriptions; +import br.com.acta.common.config.swagger.examples.SwaggerParameterDescriptions; +import br.com.acta.dto.pdca.ciclo.CicloRequestDTO; +import br.com.acta.dto.pdca.ciclo.CicloResponseDTO; +import br.com.acta.entity.enums.StatusCiclo; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.parameters.RequestBody; +import org.springframework.http.ResponseEntity; + +import java.util.List; +import java.util.Map; + +@Tag(name = "Ciclos", description = SwaggerOpenapiDescriptions.CICLO_CONTROLLER) +public interface CicloOpenapi { + + @Operation(summary = "Lista os ciclos") + @ApiResponse(responseCode = "200", description = "Ciclos encontrados", content = @Content(array = @ArraySchema(schema = @Schema(implementation = CicloResponseDTO.class)))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + ResponseEntity> buscar(@Parameter(description = SwaggerParameterDescriptions.FILTRO_ID_EMPRESA) Long idEmpresa, @Parameter(description = SwaggerParameterDescriptions.ID_GESTOR) Long idGestor, @Parameter(description = SwaggerParameterDescriptions.FILTRO_STATUS) StatusCiclo status); + + @Operation(summary = "Busca um ciclo") + @ApiResponse(responseCode = "200", description = "Ciclo encontrado", content = @Content(schema = @Schema(implementation = CicloResponseDTO.class))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + @ApiNotFoundResponse + ResponseEntity buscar(@Parameter(description = SwaggerParameterDescriptions.ID_CICLO) Long id); + + @Operation(summary = "Cria um ciclo") + @ApiResponse(responseCode = "201", description = "Ciclo criado", content = @Content(schema = @Schema(implementation = CicloResponseDTO.class))) + @ApiResourceResponses + @ApiUnsupportedMediaTypeResponse + ResponseEntity inserir(@RequestBody(description = "Dados do ciclo", required = true) CicloRequestDTO cicloRequest); + + @Operation(summary = "Atualiza parcialmente um ciclo") + @ApiResponse(responseCode = "200", description = "Ciclo atualizado", content = @Content(schema = @Schema(implementation = CicloResponseDTO.class))) + @ApiResourceResponses + @ApiBusinessRuleResponse + @ApiUnsupportedMediaTypeResponse + ResponseEntity patch(@Parameter(description = SwaggerParameterDescriptions.ID_CICLO) Long id, @RequestBody(description = SwaggerParameterDescriptions.CAMPOS_CICLO, required = true) Map campos); + + @Operation(summary = "Atualiza o status de um ciclo") + @ApiResponse(responseCode = "200", description = "Status atualizado", content = @Content(schema = @Schema(implementation = CicloResponseDTO.class))) + @ApiResourceResponses + @ApiBusinessRuleResponse + ResponseEntity patchStatus(@Parameter(description = SwaggerParameterDescriptions.ID_CICLO) Long id, @Parameter(description = SwaggerParameterDescriptions.NOVO_STATUS) StatusCiclo status); + + @Operation(summary = "Cancela um ciclo") + @ApiResponse(responseCode = "204", description = "Ciclo cancelado") + @ApiResourceResponses + @ApiBusinessRuleResponse + ResponseEntity excluir(@Parameter(description = SwaggerParameterDescriptions.ID_CICLO) Long id); + + @Operation(summary = "Consulta o avanço de um ciclo") + @ApiResponse(responseCode = "200", description = "Percentual de avanço do ciclo", content = @Content(schema = @Schema(implementation = Double.class))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + ResponseEntity avancoCiclo(@Parameter(description = SwaggerParameterDescriptions.ID_CICLO) Long id); +} diff --git a/src/main/java/br/com/acta/common/config/swagger/openapi/ColaboradorOpenapi.java b/src/main/java/br/com/acta/common/config/swagger/openapi/ColaboradorOpenapi.java new file mode 100644 index 0000000..007258b --- /dev/null +++ b/src/main/java/br/com/acta/common/config/swagger/openapi/ColaboradorOpenapi.java @@ -0,0 +1,66 @@ +package br.com.acta.common.config.swagger.openapi; + +import br.com.acta.common.config.swagger.annotation.ApiAuthenticationResponses; +import br.com.acta.common.config.swagger.annotation.ApiResourceResponses; +import br.com.acta.common.config.swagger.annotation.ApiBadRequestResponse; +import br.com.acta.common.config.swagger.annotation.ApiBusinessRuleResponse; +import br.com.acta.common.config.swagger.annotation.ApiNotFoundResponse; +import br.com.acta.common.config.swagger.annotation.ApiUnsupportedMediaTypeResponse; +import br.com.acta.common.config.swagger.examples.SwaggerOpenapiDescriptions; +import br.com.acta.common.config.swagger.examples.SwaggerParameterDescriptions; +import br.com.acta.dto.core.colaborador.ColaboradorRequestDTO; +import br.com.acta.dto.core.colaborador.ColaboradorResponseDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.parameters.RequestBody; +import org.springframework.http.ResponseEntity; + +import java.util.List; +import java.util.Map; + +@Tag(name = "Colaboradores", description = SwaggerOpenapiDescriptions.COLABORADOR_CONTROLLER) +public interface ColaboradorOpenapi { + + @Operation(summary = "Lista os colaboradores de uma empresa") + @ApiResponse(responseCode = "200", description = "Colaboradores encontrados", content = @Content(array = @ArraySchema(schema = @Schema(implementation = ColaboradorResponseDTO.class)))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + @ApiNotFoundResponse + ResponseEntity> buscarPorEmpresa(@Parameter(description = SwaggerParameterDescriptions.ID_EMPRESA) Long idEmpresa); + + @Operation(summary = "Lista os colaboradores") + @ApiResponse(responseCode = "200", description = "Colaboradores encontrados", content = @Content(array = @ArraySchema(schema = @Schema(implementation = ColaboradorResponseDTO.class)))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + ResponseEntity> buscar(); + + @Operation(summary = "Busca um colaborador") + @ApiResponse(responseCode = "200", description = "Colaborador encontrado", content = @Content(schema = @Schema(implementation = ColaboradorResponseDTO.class))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + @ApiNotFoundResponse + ResponseEntity buscar(@Parameter(description = SwaggerParameterDescriptions.ID_COLABORADOR) Long id); + + @Operation(summary = "Cria um colaborador") + @ApiResponse(responseCode = "201", description = "Colaborador criado", content = @Content(schema = @Schema(implementation = ColaboradorResponseDTO.class))) + @ApiResourceResponses + @ApiBusinessRuleResponse + @ApiUnsupportedMediaTypeResponse + ResponseEntity inserir(@RequestBody(description = "Dados do colaborador", required = true) ColaboradorRequestDTO dto); + + @Operation(summary = "Atualiza parcialmente um colaborador") + @ApiResponse(responseCode = "200", description = "Colaborador atualizado", content = @Content(schema = @Schema(implementation = ColaboradorResponseDTO.class))) + @ApiResourceResponses + @ApiUnsupportedMediaTypeResponse + ResponseEntity patch(@Parameter(description = SwaggerParameterDescriptions.ID_COLABORADOR) Long id, @RequestBody(description = SwaggerParameterDescriptions.CAMPOS_COLABORADOR, required = true) Map dto); + + @Operation(summary = "Inativa um colaborador") + @ApiResponse(responseCode = "204", description = "Colaborador inativado") + @ApiResourceResponses + ResponseEntity excluir(@Parameter(description = SwaggerParameterDescriptions.ID_COLABORADOR) Long id); +} diff --git a/src/main/java/br/com/acta/common/config/swagger/openapi/EfeitoSecundarioOpenapi.java b/src/main/java/br/com/acta/common/config/swagger/openapi/EfeitoSecundarioOpenapi.java new file mode 100644 index 0000000..b999387 --- /dev/null +++ b/src/main/java/br/com/acta/common/config/swagger/openapi/EfeitoSecundarioOpenapi.java @@ -0,0 +1,55 @@ +package br.com.acta.common.config.swagger.openapi; + +import br.com.acta.common.config.swagger.annotation.ApiAuthenticationResponses; +import br.com.acta.common.config.swagger.annotation.ApiResourceResponses; +import br.com.acta.common.config.swagger.annotation.ApiBadRequestResponse; +import br.com.acta.common.config.swagger.annotation.ApiBusinessRuleResponse; +import br.com.acta.common.config.swagger.annotation.ApiNotFoundResponse; +import br.com.acta.common.config.swagger.annotation.ApiUnsupportedMediaTypeResponse; +import br.com.acta.common.config.swagger.examples.SwaggerOpenapiDescriptions; +import br.com.acta.common.config.swagger.examples.SwaggerParameterDescriptions; +import br.com.acta.dto.pdca.efeito_secundario.EfeitoSecundarioRequestDTO; +import br.com.acta.dto.pdca.efeito_secundario.EfeitoSecundarioResponseDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.parameters.RequestBody; +import org.springframework.http.ResponseEntity; + +import java.util.List; +import java.util.Map; + +@Tag(name = "Efeitos secundários", description = SwaggerOpenapiDescriptions.EFEITO_SECUNDARIO_CONTROLLER) +public interface EfeitoSecundarioOpenapi { + + @Operation(summary = "Lista os efeitos secundários de uma verificação") + @ApiResponse(responseCode = "200", description = "Efeitos secundários encontrados", content = @Content(array = @ArraySchema(schema = @Schema(implementation = EfeitoSecundarioResponseDTO.class)))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + @ApiNotFoundResponse + ResponseEntity> buscarEfeitosSecundarios(@Parameter(description = SwaggerParameterDescriptions.ID_RESULTADO) Long idResultado); + + @Operation(summary = "Cria um efeito secundário") + @ApiResponse(responseCode = "201", description = "Efeito secundário criado", content = @Content(schema = @Schema(implementation = EfeitoSecundarioResponseDTO.class))) + @ApiResourceResponses + @ApiBusinessRuleResponse + @ApiUnsupportedMediaTypeResponse + ResponseEntity inserir(@Parameter(description = SwaggerParameterDescriptions.ID_RESULTADO) Long idResultado, @RequestBody(description = "Dados do efeito secundário", required = true) EfeitoSecundarioRequestDTO dto); + + @Operation(summary = "Atualiza parcialmente um efeito secundário") + @ApiResponse(responseCode = "200", description = "Efeito secundário atualizado", content = @Content(schema = @Schema(implementation = EfeitoSecundarioResponseDTO.class))) + @ApiResourceResponses + @ApiBusinessRuleResponse + @ApiUnsupportedMediaTypeResponse + ResponseEntity patch(@Parameter(description = SwaggerParameterDescriptions.ID_RESULTADO) Long idResultado, @Parameter(description = SwaggerParameterDescriptions.ID_EFEITO_SECUNDARIO) Long idEfeitoSecundario, @RequestBody(description = SwaggerParameterDescriptions.CAMPOS_EFEITO_SECUNDARIO, required = true) Map campos); + + @Operation(summary = "Exclui um efeito secundário") + @ApiResponse(responseCode = "204", description = "Efeito secundário excluído") + @ApiResourceResponses + @ApiBusinessRuleResponse + ResponseEntity excluir(@Parameter(description = SwaggerParameterDescriptions.ID_RESULTADO) Long idResultado, @Parameter(description = SwaggerParameterDescriptions.ID_EFEITO_SECUNDARIO) Long idEfeitoSecundario); +} diff --git a/src/main/java/br/com/acta/common/config/swagger/openapi/EmailOpenapi.java b/src/main/java/br/com/acta/common/config/swagger/openapi/EmailOpenapi.java new file mode 100644 index 0000000..241178a --- /dev/null +++ b/src/main/java/br/com/acta/common/config/swagger/openapi/EmailOpenapi.java @@ -0,0 +1,62 @@ +package br.com.acta.common.config.swagger.openapi; + +import br.com.acta.common.config.swagger.annotation.ApiAuthenticationResponses; +import br.com.acta.common.config.swagger.annotation.ApiResourceResponses; +import br.com.acta.common.config.swagger.annotation.ApiBadRequestResponse; +import br.com.acta.common.config.swagger.annotation.ApiNotFoundResponse; +import br.com.acta.common.config.swagger.annotation.ApiUnsupportedMediaTypeResponse; +import br.com.acta.common.config.swagger.examples.SwaggerOpenapiDescriptions; +import br.com.acta.common.config.swagger.examples.SwaggerParameterDescriptions; +import br.com.acta.dto.core.contato.email.EmailRequestDTO; +import br.com.acta.dto.core.contato.email.EmailResponseDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.parameters.RequestBody; +import org.springframework.http.ResponseEntity; + +import java.util.List; + +@Tag(name = "E-mails", description = SwaggerOpenapiDescriptions.EMAIL_CONTROLLER) +public interface EmailOpenapi { + + @Operation(summary = "Lista os e-mails de uma empresa") + @ApiResponse(responseCode = "200", description = "E-mails encontrados", content = @Content(array = @ArraySchema(schema = @Schema(implementation = EmailResponseDTO.class)))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + @ApiNotFoundResponse + ResponseEntity> buscarEmailEmpresa(@Parameter(description = SwaggerParameterDescriptions.ID_EMPRESA) Long idEmpresa); + + @Operation(summary = "Adiciona um e-mail a uma empresa") + @ApiResponse(responseCode = "201", description = "E-mail adicionado", content = @Content(schema = @Schema(implementation = EmailResponseDTO.class))) + @ApiResourceResponses + @ApiUnsupportedMediaTypeResponse + ResponseEntity inserirEmailEmpresa(@Parameter(description = SwaggerParameterDescriptions.ID_EMPRESA) Long idEmpresa, @RequestBody(description = "Dados do e-mail", required = true) EmailRequestDTO dto); + + @Operation(summary = "Exclui um e-mail de uma empresa") + @ApiResponse(responseCode = "204", description = "E-mail excluído") + @ApiResourceResponses + ResponseEntity excluirEmailEmpresa(@Parameter(description = SwaggerParameterDescriptions.ID_EMPRESA) Long idEmpresa, @Parameter(description = SwaggerParameterDescriptions.ID_EMAIL) Long idEmail); + + @Operation(summary = "Lista os e-mails de um colaborador") + @ApiResponse(responseCode = "200", description = "E-mails encontrados", content = @Content(array = @ArraySchema(schema = @Schema(implementation = EmailResponseDTO.class)))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + @ApiNotFoundResponse + ResponseEntity> buscarEmailColaborador(@Parameter(description = SwaggerParameterDescriptions.ID_COLABORADOR) Long idColaborador); + + @Operation(summary = "Adiciona um e-mail a um colaborador") + @ApiResponse(responseCode = "201", description = "E-mail adicionado", content = @Content(schema = @Schema(implementation = EmailResponseDTO.class))) + @ApiResourceResponses + @ApiUnsupportedMediaTypeResponse + ResponseEntity inserirEmailColaborador(@Parameter(description = SwaggerParameterDescriptions.ID_COLABORADOR) Long idColaborador, @RequestBody(description = "Dados do e-mail", required = true) EmailRequestDTO dto); + + @Operation(summary = "Exclui um e-mail de um colaborador") + @ApiResponse(responseCode = "204", description = "E-mail excluído") + @ApiResourceResponses + ResponseEntity excluirEmailColaborador(@Parameter(description = SwaggerParameterDescriptions.ID_COLABORADOR) Long idColaborador, @Parameter(description = SwaggerParameterDescriptions.ID_EMAIL) Long idEmail); +} diff --git a/src/main/java/br/com/acta/common/config/swagger/openapi/EmpresaOpenapi.java b/src/main/java/br/com/acta/common/config/swagger/openapi/EmpresaOpenapi.java new file mode 100644 index 0000000..6e976c8 --- /dev/null +++ b/src/main/java/br/com/acta/common/config/swagger/openapi/EmpresaOpenapi.java @@ -0,0 +1,61 @@ +package br.com.acta.common.config.swagger.openapi; + +import br.com.acta.common.config.swagger.annotation.ApiAuthenticationResponses; +import br.com.acta.common.config.swagger.annotation.ApiResourceResponses; +import br.com.acta.common.config.swagger.annotation.ApiBadRequestResponse; +import br.com.acta.common.config.swagger.annotation.ApiConflictResponse; +import br.com.acta.common.config.swagger.annotation.ApiNotFoundResponse; +import br.com.acta.common.config.swagger.annotation.ApiUnsupportedMediaTypeResponse; +import br.com.acta.common.config.swagger.examples.SwaggerOpenapiDescriptions; +import br.com.acta.common.config.swagger.examples.SwaggerParameterDescriptions; +import br.com.acta.dto.core.empresa.EmpresaRequestDTO; +import br.com.acta.dto.core.empresa.EmpresaResponseDTO; +import br.com.acta.entity.enums.TamanhoEmpresa; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.parameters.RequestBody; +import org.springframework.http.ResponseEntity; + +import java.util.List; +import java.util.Map; + +@Tag(name = "Empresas", description = SwaggerOpenapiDescriptions.EMPRESA_CONTROLLER) +public interface EmpresaOpenapi { + + @Operation(summary = "Lista as empresas") + @ApiResponse(responseCode = "200", description = "Empresas encontradas", content = @Content(array = @ArraySchema(schema = @Schema(implementation = EmpresaResponseDTO.class)))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + ResponseEntity> buscar(@Parameter(description = SwaggerParameterDescriptions.TAMANHO_EMPRESA) TamanhoEmpresa tamanho); + + @Operation(summary = "Busca uma empresa") + @ApiResponse(responseCode = "200", description = "Empresa encontrada", content = @Content(schema = @Schema(implementation = EmpresaResponseDTO.class))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + @ApiNotFoundResponse + ResponseEntity buscar(@Parameter(description = SwaggerParameterDescriptions.ID_EMPRESA) Long id); + + @Operation(summary = "Cria uma empresa") + @ApiResponse(responseCode = "201", description = "Empresa criada", content = @Content(schema = @Schema(implementation = EmpresaResponseDTO.class))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + @ApiConflictResponse + @ApiUnsupportedMediaTypeResponse + ResponseEntity inserir(@RequestBody(description = "Dados da empresa", required = true) EmpresaRequestDTO dto); + + @Operation(summary = "Atualiza parcialmente uma empresa") + @ApiResponse(responseCode = "200", description = "Empresa atualizada", content = @Content(schema = @Schema(implementation = EmpresaResponseDTO.class))) + @ApiResourceResponses + @ApiUnsupportedMediaTypeResponse + ResponseEntity patch(@Parameter(description = SwaggerParameterDescriptions.ID_EMPRESA) Long id, @RequestBody(description = SwaggerParameterDescriptions.CAMPOS_EMPRESA, required = true) Map campos); + + @Operation(summary = "Inativa uma empresa") + @ApiResponse(responseCode = "204", description = "Empresa inativada") + @ApiResourceResponses + ResponseEntity excluir(@Parameter(description = SwaggerParameterDescriptions.ID_EMPRESA) Long id); +} diff --git a/src/main/java/br/com/acta/common/config/swagger/openapi/EnderecoEmpresaOpenapi.java b/src/main/java/br/com/acta/common/config/swagger/openapi/EnderecoEmpresaOpenapi.java new file mode 100644 index 0000000..2492a44 --- /dev/null +++ b/src/main/java/br/com/acta/common/config/swagger/openapi/EnderecoEmpresaOpenapi.java @@ -0,0 +1,51 @@ +package br.com.acta.common.config.swagger.openapi; + +import br.com.acta.common.config.swagger.annotation.ApiAuthenticationResponses; +import br.com.acta.common.config.swagger.annotation.ApiResourceResponses; +import br.com.acta.common.config.swagger.annotation.ApiBadRequestResponse; +import br.com.acta.common.config.swagger.annotation.ApiNotFoundResponse; +import br.com.acta.common.config.swagger.annotation.ApiUnsupportedMediaTypeResponse; +import br.com.acta.common.config.swagger.examples.SwaggerOpenapiDescriptions; +import br.com.acta.common.config.swagger.examples.SwaggerParameterDescriptions; +import br.com.acta.dto.core.empresa.endereco.EnderecoRequestDTO; +import br.com.acta.dto.core.empresa.endereco.EnderecoResponseDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.parameters.RequestBody; +import org.springframework.http.ResponseEntity; + +import java.util.List; + +@Tag(name = "Endereços de empresas", description = SwaggerOpenapiDescriptions.ENDERECO_EMPRESA_CONTROLLER) +public interface EnderecoEmpresaOpenapi { + + @Operation(summary = "Busca um endereço de uma empresa") + @ApiResponse(responseCode = "200", description = "Endereço encontrado", content = @Content(schema = @Schema(implementation = EnderecoResponseDTO.class))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + @ApiNotFoundResponse + ResponseEntity buscar(@Parameter(description = SwaggerParameterDescriptions.ID_EMPRESA) Long idEmpresa, @Parameter(description = SwaggerParameterDescriptions.ID_ENDERECO) Long idEndereco); + + @Operation(summary = "Lista os endereços de uma empresa") + @ApiResponse(responseCode = "200", description = "Endereços encontrados", content = @Content(array = @ArraySchema(schema = @Schema(implementation = EnderecoResponseDTO.class)))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + @ApiNotFoundResponse + ResponseEntity> buscar(@Parameter(description = SwaggerParameterDescriptions.ID_EMPRESA) Long idEmpresa); + + @Operation(summary = "Adiciona um endereço a uma empresa") + @ApiResponse(responseCode = "201", description = "Endereço adicionado", content = @Content(schema = @Schema(implementation = EnderecoResponseDTO.class))) + @ApiResourceResponses + @ApiUnsupportedMediaTypeResponse + ResponseEntity inserir(@Parameter(description = SwaggerParameterDescriptions.ID_EMPRESA) Long idEmpresa, @RequestBody(description = "Dados do endereço", required = true) EnderecoRequestDTO dto); + + @Operation(summary = "Exclui um endereço de uma empresa") + @ApiResponse(responseCode = "204", description = "Endereço excluído") + @ApiResourceResponses + ResponseEntity excluir(@Parameter(description = SwaggerParameterDescriptions.ID_EMPRESA) Long idEmpresa, @Parameter(description = SwaggerParameterDescriptions.ID_ENDERECO) Long idEndereco); +} diff --git a/src/main/java/br/com/acta/common/config/swagger/openapi/HealthOpenapi.java b/src/main/java/br/com/acta/common/config/swagger/openapi/HealthOpenapi.java new file mode 100644 index 0000000..4adeda4 --- /dev/null +++ b/src/main/java/br/com/acta/common/config/swagger/openapi/HealthOpenapi.java @@ -0,0 +1,22 @@ +package br.com.acta.common.config.swagger.openapi; + +import br.com.acta.common.config.swagger.examples.SwaggerOpenapiDescriptions; +import br.com.acta.dto.health.HealthResponseDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.http.ResponseEntity; + +@Tag(name = "Saúde", description = SwaggerOpenapiDescriptions.HEALTH_CONTROLLER) +public interface HealthOpenapi { + + @Operation(summary = "Verifica a saúde da API", security = {}) + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "API e banco de dados disponíveis", content = @Content(schema = @Schema(implementation = HealthResponseDTO.class))), + @ApiResponse(responseCode = "503", description = "Banco de dados indisponível", content = @Content(schema = @Schema(implementation = HealthResponseDTO.class))) + }) + ResponseEntity verificar(); +} diff --git a/src/main/java/br/com/acta/common/config/swagger/openapi/MetaOpenapi.java b/src/main/java/br/com/acta/common/config/swagger/openapi/MetaOpenapi.java new file mode 100644 index 0000000..fd0ca21 --- /dev/null +++ b/src/main/java/br/com/acta/common/config/swagger/openapi/MetaOpenapi.java @@ -0,0 +1,86 @@ +package br.com.acta.common.config.swagger.openapi; + +import br.com.acta.common.config.swagger.annotation.ApiAuthenticationResponses; +import br.com.acta.common.config.swagger.annotation.ApiResourceResponses; +import br.com.acta.common.config.swagger.annotation.ApiBadRequestResponse; +import br.com.acta.common.config.swagger.annotation.ApiBusinessRuleResponse; +import br.com.acta.common.config.swagger.annotation.ApiNotFoundResponse; +import br.com.acta.common.config.swagger.annotation.ApiUnsupportedMediaTypeResponse; +import br.com.acta.common.config.swagger.examples.SwaggerOpenapiDescriptions; +import br.com.acta.common.config.swagger.examples.SwaggerParameterDescriptions; +import br.com.acta.dto.core.usuario.UsuarioSummaryResponseDTO; +import br.com.acta.dto.pdca.meta.MetaRequestDTO; +import br.com.acta.dto.pdca.meta.MetaResponseDTO; +import br.com.acta.entity.enums.Prioridade; +import br.com.acta.entity.enums.StatusMeta; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.parameters.RequestBody; +import org.springframework.http.ResponseEntity; + +import java.util.List; +import java.util.Map; + +@Tag(name = "Metas", description = SwaggerOpenapiDescriptions.META_CONTROLLER) +public interface MetaOpenapi { + + @Operation(summary = "Lista as metas de um ciclo") + @ApiResponse(responseCode = "200", description = "Metas encontradas", content = @Content(array = @ArraySchema(schema = @Schema(implementation = MetaResponseDTO.class)))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + ResponseEntity> buscar(@Parameter(description = SwaggerParameterDescriptions.ID_CICLO) Long idCiclo, @Parameter(description = SwaggerParameterDescriptions.FILTRO_STATUS) StatusMeta status, @Parameter(description = SwaggerParameterDescriptions.FILTRO_PRIORIDADE) Prioridade prioridade); + + @Operation(summary = "Busca uma meta") + @ApiResponse(responseCode = "200", description = "Meta encontrada", content = @Content(schema = @Schema(implementation = MetaResponseDTO.class))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + @ApiNotFoundResponse + ResponseEntity buscar(@Parameter(description = SwaggerParameterDescriptions.ID_META) Long id); + + @Operation(summary = "Cria uma meta") + @ApiResponse(responseCode = "201", description = "Meta criada", content = @Content(schema = @Schema(implementation = MetaResponseDTO.class))) + @ApiResourceResponses + @ApiBusinessRuleResponse + @ApiUnsupportedMediaTypeResponse + ResponseEntity inserir(@Parameter(description = SwaggerParameterDescriptions.ID_PLANO_ACAO) Long idPlanoAcao, @RequestBody(description = "Dados da meta", required = true) MetaRequestDTO dto); + + @Operation(summary = "Atualiza parcialmente uma meta") + @ApiResponse(responseCode = "200", description = "Meta atualizada", content = @Content(schema = @Schema(implementation = MetaResponseDTO.class))) + @ApiResourceResponses + @ApiUnsupportedMediaTypeResponse + ResponseEntity patch(@Parameter(description = SwaggerParameterDescriptions.ID_META) Long id, @RequestBody(description = SwaggerParameterDescriptions.CAMPOS_META, required = true) Map dto); + + @Operation(summary = "Atualiza o status de uma meta") + @ApiResponse(responseCode = "200", description = "Status atualizado", content = @Content(schema = @Schema(implementation = MetaResponseDTO.class))) + @ApiResourceResponses + ResponseEntity patchStatus(@Parameter(description = SwaggerParameterDescriptions.ID_META) Long id, @Parameter(description = SwaggerParameterDescriptions.NOVO_STATUS) StatusMeta status); + + @Operation(summary = "Exclui uma meta") + @ApiResponse(responseCode = "204", description = "Meta excluída") + @ApiResourceResponses + ResponseEntity delete(@Parameter(description = SwaggerParameterDescriptions.ID_META) Long id); + + @Operation(summary = "Lista os responsáveis por uma meta") + @ApiResponse(responseCode = "200", description = "Responsáveis encontrados", content = @Content(array = @ArraySchema(schema = @Schema(implementation = UsuarioSummaryResponseDTO.class)))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + @ApiNotFoundResponse + ResponseEntity> buscarResponsaveis(@Parameter(description = SwaggerParameterDescriptions.ID_META) Long id); + + @Operation(summary = "Adiciona responsáveis a uma meta") + @ApiResponse(responseCode = "201", description = "Responsáveis adicionados", content = @Content(array = @ArraySchema(schema = @Schema(implementation = UsuarioSummaryResponseDTO.class)))) + @ApiResourceResponses + @ApiBusinessRuleResponse + ResponseEntity> adicionarResponsavel(@Parameter(description = SwaggerParameterDescriptions.IDS_RESPONSAVEIS) List idsResponsaveis, @Parameter(description = SwaggerParameterDescriptions.ID_META) Long id); + + @Operation(summary = "Remove responsáveis de uma meta") + @ApiResponse(responseCode = "204", description = "Responsáveis removidos") + @ApiResourceResponses + @ApiBusinessRuleResponse + ResponseEntity excluirResponsaveis(@Parameter(description = SwaggerParameterDescriptions.ID_META) Long id, @Parameter(description = SwaggerParameterDescriptions.IDS_RESPONSAVEIS) List idsResponsaveis); +} diff --git a/src/main/java/br/com/acta/common/config/swagger/openapi/Plano5W2HOpenapi.java b/src/main/java/br/com/acta/common/config/swagger/openapi/Plano5W2HOpenapi.java new file mode 100644 index 0000000..4ac880a --- /dev/null +++ b/src/main/java/br/com/acta/common/config/swagger/openapi/Plano5W2HOpenapi.java @@ -0,0 +1,53 @@ +package br.com.acta.common.config.swagger.openapi; + +import br.com.acta.common.config.swagger.annotation.ApiAuthenticationResponses; +import br.com.acta.common.config.swagger.annotation.ApiResourceResponses; +import br.com.acta.common.config.swagger.annotation.ApiBadRequestResponse; +import br.com.acta.common.config.swagger.annotation.ApiBusinessRuleResponse; +import br.com.acta.common.config.swagger.annotation.ApiNotFoundResponse; +import br.com.acta.common.config.swagger.annotation.ApiUnsupportedMediaTypeResponse; +import br.com.acta.common.config.swagger.examples.SwaggerOpenapiDescriptions; +import br.com.acta.common.config.swagger.examples.SwaggerParameterDescriptions; +import br.com.acta.dto.pdca.plano_5w2h.Plano5W2HRequestDTO; +import br.com.acta.dto.pdca.plano_5w2h.Plano5W2HResponseDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.parameters.RequestBody; +import org.springframework.http.ResponseEntity; + +import java.util.Map; + +@Tag(name = "Planos 5W2H", description = SwaggerOpenapiDescriptions.PLANO_5W2H_CONTROLLER) +public interface Plano5W2HOpenapi { + + @Operation(summary = "Busca o plano 5W2H de um plano de ação") + @ApiResponse(responseCode = "200", description = "Plano 5W2H encontrado", content = @Content(schema = @Schema(implementation = Plano5W2HResponseDTO.class))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + @ApiNotFoundResponse + ResponseEntity buscar(@Parameter(description = SwaggerParameterDescriptions.ID_PLANO_ACAO) Long idPlanoAcao); + + @Operation(summary = "Cria um plano 5W2H") + @ApiResponse(responseCode = "201", description = "Plano 5W2H criado", content = @Content(schema = @Schema(implementation = Plano5W2HResponseDTO.class))) + @ApiResourceResponses + @ApiBusinessRuleResponse + @ApiUnsupportedMediaTypeResponse + ResponseEntity inserir(@Parameter(description = SwaggerParameterDescriptions.ID_PLANO_ACAO) Long idPlanoAcao, @RequestBody(description = "Dados do plano 5W2H", required = true) Plano5W2HRequestDTO dto); + + @Operation(summary = "Atualiza parcialmente um plano 5W2H") + @ApiResponse(responseCode = "200", description = "Plano 5W2H atualizado", content = @Content(schema = @Schema(implementation = Plano5W2HResponseDTO.class))) + @ApiResourceResponses + @ApiBusinessRuleResponse + @ApiUnsupportedMediaTypeResponse + ResponseEntity patch(@Parameter(description = SwaggerParameterDescriptions.ID_PLANO_5W2H) Long id, @RequestBody(description = SwaggerParameterDescriptions.CAMPOS_PLANO_5W2H, required = true) Map campos); + + @Operation(summary = "Exclui um plano 5W2H") + @ApiResponse(responseCode = "204", description = "Plano 5W2H excluído") + @ApiResourceResponses + @ApiBusinessRuleResponse + ResponseEntity excluir(@Parameter(description = SwaggerParameterDescriptions.ID_PLANO_5W2H) Long id); +} diff --git a/src/main/java/br/com/acta/common/config/swagger/openapi/PlanoAcaoOpenapi.java b/src/main/java/br/com/acta/common/config/swagger/openapi/PlanoAcaoOpenapi.java new file mode 100644 index 0000000..f35305b --- /dev/null +++ b/src/main/java/br/com/acta/common/config/swagger/openapi/PlanoAcaoOpenapi.java @@ -0,0 +1,68 @@ +package br.com.acta.common.config.swagger.openapi; + +import br.com.acta.common.config.swagger.annotation.ApiAuthenticationResponses; +import br.com.acta.common.config.swagger.annotation.ApiResourceResponses; +import br.com.acta.common.config.swagger.annotation.ApiBadRequestResponse; +import br.com.acta.common.config.swagger.annotation.ApiBusinessRuleResponse; +import br.com.acta.common.config.swagger.annotation.ApiNotFoundResponse; +import br.com.acta.common.config.swagger.annotation.ApiUnsupportedMediaTypeResponse; +import br.com.acta.common.config.swagger.examples.SwaggerOpenapiDescriptions; +import br.com.acta.common.config.swagger.examples.SwaggerParameterDescriptions; +import br.com.acta.dto.pdca.plano_acao.PlanoAcaoRequestDTO; +import br.com.acta.dto.pdca.plano_acao.PlanoAcaoResponseDTO; +import br.com.acta.entity.enums.Prioridade; +import br.com.acta.entity.enums.StatusPlanoAcao; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.parameters.RequestBody; +import org.springframework.http.ResponseEntity; + +import java.util.List; +import java.util.Map; + +@Tag(name = "Planos de ação", description = SwaggerOpenapiDescriptions.PLANO_ACAO_CONTROLLER) +public interface PlanoAcaoOpenapi { + + @Operation(summary = "Lista os planos de ação de um ciclo") + @ApiResponse(responseCode = "200", description = "Planos de ação encontrados", content = @Content(array = @ArraySchema(schema = @Schema(implementation = PlanoAcaoResponseDTO.class)))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + ResponseEntity> buscar(@Parameter(description = SwaggerParameterDescriptions.ID_CICLO) Long idCiclo, @Parameter(description = SwaggerParameterDescriptions.FILTRO_STATUS) StatusPlanoAcao status, @Parameter(description = SwaggerParameterDescriptions.FILTRO_PRIORIDADE) Prioridade prioridade); + + @Operation(summary = "Busca um plano de ação") + @ApiResponse(responseCode = "200", description = "Plano de ação encontrado", content = @Content(schema = @Schema(implementation = PlanoAcaoResponseDTO.class))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + @ApiNotFoundResponse + ResponseEntity buscar(@Parameter(description = SwaggerParameterDescriptions.ID_PLANO_ACAO) Long id); + + @Operation(summary = "Cria um plano de ação") + @ApiResponse(responseCode = "201", description = "Plano de ação criado", content = @Content(schema = @Schema(implementation = PlanoAcaoResponseDTO.class))) + @ApiResourceResponses + @ApiBusinessRuleResponse + @ApiUnsupportedMediaTypeResponse + ResponseEntity inserir(@Parameter(description = SwaggerParameterDescriptions.ID_CICLO) Long idCiclo, @RequestBody(description = "Dados do plano de ação", required = true) PlanoAcaoRequestDTO dto, @Parameter(description = SwaggerParameterDescriptions.ID_CRIADO_POR) Long idCriadoPor); + + @Operation(summary = "Atualiza parcialmente um plano de ação") + @ApiResponse(responseCode = "200", description = "Plano de ação atualizado", content = @Content(schema = @Schema(implementation = PlanoAcaoResponseDTO.class))) + @ApiResourceResponses + @ApiUnsupportedMediaTypeResponse + ResponseEntity patch(@Parameter(description = SwaggerParameterDescriptions.ID_PLANO_ACAO) Long id, @RequestBody(description = SwaggerParameterDescriptions.CAMPOS_PLANO_ACAO, required = true) Map campos); + + @Operation(summary = "Atualiza o status de um plano de ação") + @ApiResponse(responseCode = "200", description = "Status atualizado", content = @Content(schema = @Schema(implementation = PlanoAcaoResponseDTO.class))) + @ApiResourceResponses + @ApiBusinessRuleResponse + ResponseEntity patchStatus(@Parameter(description = SwaggerParameterDescriptions.ID_PLANO_ACAO) Long id, @Parameter(description = SwaggerParameterDescriptions.NOVO_STATUS) StatusPlanoAcao status); + + @Operation(summary = "Exclui um plano de ação") + @ApiResponse(responseCode = "204", description = "Plano de ação excluído") + @ApiResourceResponses + @ApiBusinessRuleResponse + ResponseEntity excluir(@Parameter(description = SwaggerParameterDescriptions.ID_PLANO_ACAO) Long id); +} diff --git a/src/main/java/br/com/acta/common/config/swagger/openapi/PriorizacaoProblemaOpenapi.java b/src/main/java/br/com/acta/common/config/swagger/openapi/PriorizacaoProblemaOpenapi.java new file mode 100644 index 0000000..c9e585b --- /dev/null +++ b/src/main/java/br/com/acta/common/config/swagger/openapi/PriorizacaoProblemaOpenapi.java @@ -0,0 +1,55 @@ +package br.com.acta.common.config.swagger.openapi; + +import br.com.acta.common.config.swagger.annotation.ApiAuthenticationResponses; +import br.com.acta.common.config.swagger.annotation.ApiResourceResponses; +import br.com.acta.common.config.swagger.annotation.ApiBadRequestResponse; +import br.com.acta.common.config.swagger.annotation.ApiBusinessRuleResponse; +import br.com.acta.common.config.swagger.annotation.ApiNotFoundResponse; +import br.com.acta.common.config.swagger.annotation.ApiUnsupportedMediaTypeResponse; +import br.com.acta.common.config.swagger.examples.SwaggerOpenapiDescriptions; +import br.com.acta.common.config.swagger.examples.SwaggerParameterDescriptions; +import br.com.acta.dto.join.priorizacao_problema.PriorizacaoProblemaRequestDTO; +import br.com.acta.dto.join.priorizacao_problema.PriorizacaoProblemaResponseDTO; +import br.com.acta.dto.pdca.problema.ProblemaResponseDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.parameters.RequestBody; +import org.springframework.http.ResponseEntity; + +import java.util.List; +import java.util.Map; + +@Tag(name = "Priorização de problemas", description = SwaggerOpenapiDescriptions.PRIORIZACAO_PROBLEMA_CONTROLLER) +public interface PriorizacaoProblemaOpenapi { + + @Operation(summary = "Lista as priorizações de um problema") + @ApiResponse(responseCode = "200", description = "Priorizações encontradas", content = @Content(array = @ArraySchema(schema = @Schema(implementation = PriorizacaoProblemaResponseDTO.class)))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + @ApiNotFoundResponse + @ApiBusinessRuleResponse + ResponseEntity> buscar(@Parameter(description = SwaggerParameterDescriptions.ID_PROBLEMA) Long idProblema, @Parameter(description = SwaggerParameterDescriptions.FILTRO_ID_USUARIO) Long idUsuario); + + @Operation(summary = "Cria uma priorização") + @ApiResponse(responseCode = "201", description = "Priorização criada", content = @Content(schema = @Schema(implementation = PriorizacaoProblemaResponseDTO.class))) + @ApiResourceResponses + @ApiBusinessRuleResponse + @ApiUnsupportedMediaTypeResponse + ResponseEntity inserir(@Parameter(description = SwaggerParameterDescriptions.ID_PROBLEMA) Long idProblema, @RequestBody(description = "Dados da priorização", required = true) PriorizacaoProblemaRequestDTO dto); + + @Operation(summary = "Atualiza uma priorização") + @ApiResponse(responseCode = "200", description = "Priorização atualizada", content = @Content(schema = @Schema(implementation = PriorizacaoProblemaResponseDTO.class))) + @ApiResourceResponses + @ApiUnsupportedMediaTypeResponse + ResponseEntity patch(@Parameter(description = SwaggerParameterDescriptions.ID_PROBLEMA) Long idProblema, @Parameter(description = SwaggerParameterDescriptions.ID_USUARIO) Long idUsuario, @RequestBody(description = SwaggerParameterDescriptions.CAMPOS_PRIORIZACAO, required = true) Map campos); + + @Operation(summary = "Aplica o peso da priorização ao problema") + @ApiResponse(responseCode = "200", description = "Peso aplicado", content = @Content(schema = @Schema(implementation = ProblemaResponseDTO.class))) + @ApiResourceResponses + ResponseEntity aplicarPeso(@Parameter(description = SwaggerParameterDescriptions.ID_PROBLEMA) Long idProblema); +} diff --git a/src/main/java/br/com/acta/common/config/swagger/openapi/ProblemaOpenapi.java b/src/main/java/br/com/acta/common/config/swagger/openapi/ProblemaOpenapi.java new file mode 100644 index 0000000..8015cc4 --- /dev/null +++ b/src/main/java/br/com/acta/common/config/swagger/openapi/ProblemaOpenapi.java @@ -0,0 +1,67 @@ +package br.com.acta.common.config.swagger.openapi; + +import br.com.acta.common.config.swagger.annotation.ApiAuthenticationResponses; +import br.com.acta.common.config.swagger.annotation.ApiResourceResponses; +import br.com.acta.common.config.swagger.annotation.ApiBadRequestResponse; +import br.com.acta.common.config.swagger.annotation.ApiBusinessRuleResponse; +import br.com.acta.common.config.swagger.annotation.ApiNotFoundResponse; +import br.com.acta.common.config.swagger.annotation.ApiUnsupportedMediaTypeResponse; +import br.com.acta.common.config.swagger.examples.SwaggerOpenapiDescriptions; +import br.com.acta.common.config.swagger.examples.SwaggerParameterDescriptions; +import br.com.acta.dto.pdca.problema.ProblemaRequestDTO; +import br.com.acta.dto.pdca.problema.ProblemaResponseDTO; +import br.com.acta.entity.enums.StatusProblema; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.parameters.RequestBody; +import org.springframework.http.ResponseEntity; + +import java.util.List; +import java.util.Map; + +@Tag(name = "Problemas", description = SwaggerOpenapiDescriptions.PROBLEMA_CONTROLLER) +public interface ProblemaOpenapi { + + @Operation(summary = "Lista os problemas de um ciclo") + @ApiResponse(responseCode = "200", description = "Problemas encontrados", content = @Content(array = @ArraySchema(schema = @Schema(implementation = ProblemaResponseDTO.class)))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + ResponseEntity> buscar(@Parameter(description = SwaggerParameterDescriptions.ID_CICLO) Long idCiclo, @Parameter(description = SwaggerParameterDescriptions.FILTRO_STATUS) StatusProblema status, @Parameter(description = SwaggerParameterDescriptions.ID_PROBLEMA_PAI) Long idProblemaPai); + + @Operation(summary = "Busca um problema") + @ApiResponse(responseCode = "200", description = "Problema encontrado", content = @Content(schema = @Schema(implementation = ProblemaResponseDTO.class))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + @ApiNotFoundResponse + ResponseEntity buscar(@Parameter(description = SwaggerParameterDescriptions.ID_PROBLEMA) Long id); + + @Operation(summary = "Cria um problema") + @ApiResponse(responseCode = "201", description = "Problema criado", content = @Content(schema = @Schema(implementation = ProblemaResponseDTO.class))) + @ApiResourceResponses + @ApiBusinessRuleResponse + @ApiUnsupportedMediaTypeResponse + ResponseEntity inserir(@Parameter(description = SwaggerParameterDescriptions.ID_CICLO) Long idCiclo, @RequestBody(description = "Dados do problema", required = true) ProblemaRequestDTO dto); + + @Operation(summary = "Atualiza parcialmente um problema") + @ApiResponse(responseCode = "200", description = "Problema atualizado", content = @Content(schema = @Schema(implementation = ProblemaResponseDTO.class))) + @ApiResourceResponses + @ApiBusinessRuleResponse + @ApiUnsupportedMediaTypeResponse + ResponseEntity patch(@Parameter(description = SwaggerParameterDescriptions.ID_PROBLEMA) Long id, @RequestBody(description = SwaggerParameterDescriptions.CAMPOS_PROBLEMA, required = true) Map campos); + + @Operation(summary = "Atualiza o status de um problema") + @ApiResponse(responseCode = "200", description = "Status atualizado", content = @Content(schema = @Schema(implementation = ProblemaResponseDTO.class))) + @ApiResourceResponses + @ApiBusinessRuleResponse + ResponseEntity patchStatus(@Parameter(description = SwaggerParameterDescriptions.ID_PROBLEMA) Long id, @Parameter(description = SwaggerParameterDescriptions.NOVO_STATUS) StatusProblema status); + + @Operation(summary = "Exclui um problema") + @ApiResponse(responseCode = "204", description = "Problema excluído") + @ApiResourceResponses + ResponseEntity excluir(@Parameter(description = SwaggerParameterDescriptions.ID_PROBLEMA) Long id); +} diff --git a/src/main/java/br/com/acta/common/config/swagger/openapi/TarefaDependenteOpenapi.java b/src/main/java/br/com/acta/common/config/swagger/openapi/TarefaDependenteOpenapi.java new file mode 100644 index 0000000..b9e3ec2 --- /dev/null +++ b/src/main/java/br/com/acta/common/config/swagger/openapi/TarefaDependenteOpenapi.java @@ -0,0 +1,44 @@ +package br.com.acta.common.config.swagger.openapi; + +import br.com.acta.common.config.swagger.annotation.ApiAuthenticationResponses; +import br.com.acta.common.config.swagger.annotation.ApiResourceResponses; +import br.com.acta.common.config.swagger.annotation.ApiBadRequestResponse; +import br.com.acta.common.config.swagger.annotation.ApiBusinessRuleResponse; +import br.com.acta.common.config.swagger.annotation.ApiNotFoundResponse; +import br.com.acta.common.config.swagger.examples.SwaggerOpenapiDescriptions; +import br.com.acta.common.config.swagger.examples.SwaggerParameterDescriptions; +import br.com.acta.dto.pdca.tarefa.TarefaResponseDTO; +import br.com.acta.dto.pdca.tarefa.TarefaSummaryResponseDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.http.ResponseEntity; + +import java.util.List; + +@Tag(name = "Dependências de tarefas", description = SwaggerOpenapiDescriptions.TAREFA_DEPENDENTE_CONTROLLER) +public interface TarefaDependenteOpenapi { + + @Operation(summary = "Lista as dependências de uma tarefa") + @ApiResponse(responseCode = "200", description = "Dependências encontradas", content = @Content(array = @ArraySchema(schema = @Schema(implementation = TarefaSummaryResponseDTO.class)))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + @ApiNotFoundResponse + ResponseEntity> buscar(@Parameter(description = SwaggerParameterDescriptions.ID_TAREFA) Long id); + + @Operation(summary = "Adiciona uma dependência à tarefa") + @ApiResponse(responseCode = "201", description = "Dependência adicionada", content = @Content(schema = @Schema(implementation = TarefaResponseDTO.class))) + @ApiResourceResponses + @ApiBusinessRuleResponse + ResponseEntity adicionar(@Parameter(description = SwaggerParameterDescriptions.ID_TAREFA) Long id, @Parameter(description = SwaggerParameterDescriptions.ID_DEPENDENTE) Long idDependente); + + @Operation(summary = "Remove uma dependência da tarefa") + @ApiResponse(responseCode = "204", description = "Dependência removida") + @ApiResourceResponses + @ApiBusinessRuleResponse + ResponseEntity remover(@Parameter(description = SwaggerParameterDescriptions.ID_TAREFA) Long id, @Parameter(description = SwaggerParameterDescriptions.ID_DEPENDENTE) Long idDependente); +} diff --git a/src/main/java/br/com/acta/common/config/swagger/openapi/TarefaOpenapi.java b/src/main/java/br/com/acta/common/config/swagger/openapi/TarefaOpenapi.java new file mode 100644 index 0000000..356c33a --- /dev/null +++ b/src/main/java/br/com/acta/common/config/swagger/openapi/TarefaOpenapi.java @@ -0,0 +1,85 @@ +package br.com.acta.common.config.swagger.openapi; + +import br.com.acta.common.config.swagger.annotation.ApiAuthenticationResponses; +import br.com.acta.common.config.swagger.annotation.ApiResourceResponses; +import br.com.acta.common.config.swagger.annotation.ApiBadRequestResponse; +import br.com.acta.common.config.swagger.annotation.ApiBusinessRuleResponse; +import br.com.acta.common.config.swagger.annotation.ApiNotFoundResponse; +import br.com.acta.common.config.swagger.annotation.ApiUnsupportedMediaTypeResponse; +import br.com.acta.common.config.swagger.examples.SwaggerOpenapiDescriptions; +import br.com.acta.common.config.swagger.examples.SwaggerParameterDescriptions; +import br.com.acta.dto.pdca.tarefa.TarefaRequestDTO; +import br.com.acta.dto.pdca.tarefa.TarefaResponseDTO; +import br.com.acta.dto.pdca.tarefa.TarefaStatusUpdateDTO; +import br.com.acta.entity.enums.Prioridade; +import br.com.acta.entity.enums.StatusTarefa; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.parameters.RequestBody; +import org.springframework.http.ResponseEntity; + +import java.time.LocalDate; +import java.util.List; +import java.util.Map; + +@Tag(name = "Tarefas", description = SwaggerOpenapiDescriptions.TAREFA_CONTROLLER) +public interface TarefaOpenapi { + + @Operation(summary = "Lista as tarefas de um plano de ação") + @ApiResponse(responseCode = "200", description = "Tarefas encontradas", content = @Content(array = @ArraySchema(schema = @Schema(implementation = TarefaResponseDTO.class)))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + @ApiNotFoundResponse + ResponseEntity> buscar(@Parameter(description = SwaggerParameterDescriptions.ID_PLANO_ACAO) Long idPlanoAcao, @Parameter(description = SwaggerParameterDescriptions.FILTRO_STATUS) StatusTarefa status, @Parameter(description = SwaggerParameterDescriptions.FILTRO_ID_RESPONSAVEL) Long idResponsavel, @Parameter(description = SwaggerParameterDescriptions.FILTRO_PRIORIDADE) Prioridade prioridade); + + @Operation(summary = "Busca uma tarefa") + @ApiResponse(responseCode = "200", description = "Tarefa encontrada", content = @Content(schema = @Schema(implementation = TarefaResponseDTO.class))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + @ApiNotFoundResponse + ResponseEntity buscar(@Parameter(description = SwaggerParameterDescriptions.ID_TAREFA) Long id); + + @Operation(summary = "Cria uma tarefa") + @ApiResponse(responseCode = "201", description = "Tarefa criada", content = @Content(schema = @Schema(implementation = TarefaResponseDTO.class))) + @ApiResourceResponses + @ApiBusinessRuleResponse + @ApiUnsupportedMediaTypeResponse + ResponseEntity inserir(@Parameter(description = SwaggerParameterDescriptions.ID_PLANO_ACAO) Long idPlanoAcao, @RequestBody(description = "Dados da tarefa", required = true) TarefaRequestDTO dto); + + @Operation(summary = "Atualiza parcialmente uma tarefa") + @ApiResponse(responseCode = "200", description = "Tarefa atualizada", content = @Content(schema = @Schema(implementation = TarefaResponseDTO.class))) + @ApiResourceResponses + @ApiBusinessRuleResponse + @ApiUnsupportedMediaTypeResponse + ResponseEntity patch(@Parameter(description = SwaggerParameterDescriptions.ID_TAREFA) Long id, @RequestBody(description = SwaggerParameterDescriptions.CAMPOS_TAREFA, required = true) Map campos); + + @Operation(summary = "Atualiza o status de uma tarefa") + @ApiResponse(responseCode = "200", description = "Status atualizado", content = @Content(schema = @Schema(implementation = TarefaResponseDTO.class))) + @ApiResourceResponses + @ApiBusinessRuleResponse + @ApiUnsupportedMediaTypeResponse + ResponseEntity patchStatus(@Parameter(description = SwaggerParameterDescriptions.ID_TAREFA) Long id, @RequestBody(description = "Dados da atualização de status da tarefa", required = true) TarefaStatusUpdateDTO dto); + + @Operation(summary = "Reabre uma tarefa") + @ApiResponse(responseCode = "200", description = "Tarefa reaberta", content = @Content(schema = @Schema(implementation = TarefaResponseDTO.class))) + @ApiResourceResponses + @ApiBusinessRuleResponse + ResponseEntity reabrir(@Parameter(description = SwaggerParameterDescriptions.ID_TAREFA) Long id, @Parameter(description = SwaggerParameterDescriptions.NOVO_PRAZO) LocalDate novoPrazo); + + @Operation(summary = "Reatribui uma tarefa") + @ApiResponse(responseCode = "200", description = "Tarefa reatribuída", content = @Content(schema = @Schema(implementation = TarefaResponseDTO.class))) + @ApiResourceResponses + @ApiBusinessRuleResponse + ResponseEntity reatribuir(@Parameter(description = SwaggerParameterDescriptions.ID_TAREFA) Long id, @Parameter(description = SwaggerParameterDescriptions.ID_RESPONSAVEL) Long idResponsavel); + + @Operation(summary = "Exclui uma tarefa") + @ApiResponse(responseCode = "204", description = "Tarefa excluída") + @ApiResourceResponses + @ApiBusinessRuleResponse + ResponseEntity excluir(@Parameter(description = SwaggerParameterDescriptions.ID_TAREFA) Long id); +} diff --git a/src/main/java/br/com/acta/common/config/swagger/openapi/TelefoneOpenapi.java b/src/main/java/br/com/acta/common/config/swagger/openapi/TelefoneOpenapi.java new file mode 100644 index 0000000..0e4817e --- /dev/null +++ b/src/main/java/br/com/acta/common/config/swagger/openapi/TelefoneOpenapi.java @@ -0,0 +1,62 @@ +package br.com.acta.common.config.swagger.openapi; + +import br.com.acta.common.config.swagger.annotation.ApiAuthenticationResponses; +import br.com.acta.common.config.swagger.annotation.ApiResourceResponses; +import br.com.acta.common.config.swagger.annotation.ApiBadRequestResponse; +import br.com.acta.common.config.swagger.annotation.ApiNotFoundResponse; +import br.com.acta.common.config.swagger.annotation.ApiUnsupportedMediaTypeResponse; +import br.com.acta.common.config.swagger.examples.SwaggerOpenapiDescriptions; +import br.com.acta.common.config.swagger.examples.SwaggerParameterDescriptions; +import br.com.acta.dto.core.contato.telefone.TelefoneRequestDTO; +import br.com.acta.dto.core.contato.telefone.TelefoneResponseDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.parameters.RequestBody; +import org.springframework.http.ResponseEntity; + +import java.util.List; + +@Tag(name = "Telefones", description = SwaggerOpenapiDescriptions.TELEFONE_CONTROLLER) +public interface TelefoneOpenapi { + + @Operation(summary = "Lista os telefones de uma empresa") + @ApiResponse(responseCode = "200", description = "Telefones encontrados", content = @Content(array = @ArraySchema(schema = @Schema(implementation = TelefoneResponseDTO.class)))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + @ApiNotFoundResponse + ResponseEntity> buscarTelefoneEmpresa(@Parameter(description = SwaggerParameterDescriptions.ID_EMPRESA) Long idEmpresa); + + @Operation(summary = "Adiciona um telefone a uma empresa") + @ApiResponse(responseCode = "201", description = "Telefone adicionado", content = @Content(schema = @Schema(implementation = TelefoneResponseDTO.class))) + @ApiResourceResponses + @ApiUnsupportedMediaTypeResponse + ResponseEntity inserirTelefoneEmpresa(@Parameter(description = SwaggerParameterDescriptions.ID_EMPRESA) Long idEmpresa, @RequestBody(description = "Dados do telefone", required = true) TelefoneRequestDTO dto); + + @Operation(summary = "Exclui um telefone de uma empresa") + @ApiResponse(responseCode = "204", description = "Telefone excluído") + @ApiResourceResponses + ResponseEntity excluirTelefoneEmpresa(@Parameter(description = SwaggerParameterDescriptions.ID_EMPRESA) Long idEmpresa, @Parameter(description = SwaggerParameterDescriptions.ID_TELEFONE) Long idTelefone); + + @Operation(summary = "Lista os telefones de um colaborador") + @ApiResponse(responseCode = "200", description = "Telefones encontrados", content = @Content(array = @ArraySchema(schema = @Schema(implementation = TelefoneResponseDTO.class)))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + @ApiNotFoundResponse + ResponseEntity> buscarTelefoneColaborador(@Parameter(description = SwaggerParameterDescriptions.ID_COLABORADOR) Long idColaborador); + + @Operation(summary = "Adiciona um telefone a um colaborador") + @ApiResponse(responseCode = "201", description = "Telefone adicionado", content = @Content(schema = @Schema(implementation = TelefoneResponseDTO.class))) + @ApiResourceResponses + @ApiUnsupportedMediaTypeResponse + ResponseEntity inserirTelefoneColaborador(@Parameter(description = SwaggerParameterDescriptions.ID_COLABORADOR) Long idColaborador, @RequestBody(description = "Dados do telefone", required = true) TelefoneRequestDTO dto); + + @Operation(summary = "Exclui um telefone de um colaborador") + @ApiResponse(responseCode = "204", description = "Telefone excluído") + @ApiResourceResponses + ResponseEntity excluirTelefoneColaborador(@Parameter(description = SwaggerParameterDescriptions.ID_COLABORADOR) Long idColaborador, @Parameter(description = SwaggerParameterDescriptions.ID_TELEFONE) Long idTelefone); +} diff --git a/src/main/java/br/com/acta/common/config/swagger/openapi/TreinamentoOpenapi.java b/src/main/java/br/com/acta/common/config/swagger/openapi/TreinamentoOpenapi.java new file mode 100644 index 0000000..dad5610 --- /dev/null +++ b/src/main/java/br/com/acta/common/config/swagger/openapi/TreinamentoOpenapi.java @@ -0,0 +1,61 @@ +package br.com.acta.common.config.swagger.openapi; + +import br.com.acta.common.config.swagger.annotation.ApiAuthenticationResponses; +import br.com.acta.common.config.swagger.annotation.ApiResourceResponses; +import br.com.acta.common.config.swagger.annotation.ApiBadRequestResponse; +import br.com.acta.common.config.swagger.annotation.ApiBusinessRuleResponse; +import br.com.acta.common.config.swagger.annotation.ApiNotFoundResponse; +import br.com.acta.common.config.swagger.annotation.ApiUnsupportedMediaTypeResponse; +import br.com.acta.common.config.swagger.examples.SwaggerOpenapiDescriptions; +import br.com.acta.common.config.swagger.examples.SwaggerParameterDescriptions; +import br.com.acta.dto.pdca.treinamento.TreinamentoRequestDTO; +import br.com.acta.dto.pdca.treinamento.TreinamentoResponseDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.parameters.RequestBody; +import org.springframework.http.ResponseEntity; + +import java.util.List; +import java.util.Map; + +@Tag(name = "Treinamentos", description = SwaggerOpenapiDescriptions.TREINAMENTO_CONTROLLER) +public interface TreinamentoOpenapi { + + @Operation(summary = "Lista os treinamentos de um ciclo") + @ApiResponse(responseCode = "200", description = "Treinamentos encontrados", content = @Content(array = @ArraySchema(schema = @Schema(implementation = TreinamentoResponseDTO.class)))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + @ApiNotFoundResponse + ResponseEntity> buscarTreinamentos(@Parameter(description = SwaggerParameterDescriptions.ID_CICLO) Long idCiclo); + + @Operation(summary = "Busca um treinamento") + @ApiResponse(responseCode = "200", description = "Treinamento encontrado", content = @Content(schema = @Schema(implementation = TreinamentoResponseDTO.class))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + @ApiNotFoundResponse + ResponseEntity buscar(@Parameter(description = SwaggerParameterDescriptions.ID_TREINAMENTO) Long id); + + @Operation(summary = "Cria um treinamento") + @ApiResponse(responseCode = "201", description = "Treinamento criado", content = @Content(schema = @Schema(implementation = TreinamentoResponseDTO.class))) + @ApiResourceResponses + @ApiBusinessRuleResponse + @ApiUnsupportedMediaTypeResponse + ResponseEntity inserir(@Parameter(description = SwaggerParameterDescriptions.ID_CICLO) Long idCiclo, @RequestBody(description = "Dados do treinamento", required = true) TreinamentoRequestDTO dto); + + @Operation(summary = "Atualiza parcialmente um treinamento") + @ApiResponse(responseCode = "200", description = "Treinamento atualizado", content = @Content(schema = @Schema(implementation = TreinamentoResponseDTO.class))) + @ApiResourceResponses + @ApiUnsupportedMediaTypeResponse + ResponseEntity patch(@Parameter(description = SwaggerParameterDescriptions.ID_TREINAMENTO) Long id, @RequestBody(description = SwaggerParameterDescriptions.CAMPOS_TREINAMENTO, required = true) Map campos); + + @Operation(summary = "Exclui um treinamento") + @ApiResponse(responseCode = "204", description = "Treinamento excluído") + @ApiResourceResponses + @ApiBusinessRuleResponse + ResponseEntity excluir(@Parameter(description = SwaggerParameterDescriptions.ID_TREINAMENTO) Long id); +} diff --git a/src/main/java/br/com/acta/common/config/swagger/openapi/UsuarioCicloOpenapi.java b/src/main/java/br/com/acta/common/config/swagger/openapi/UsuarioCicloOpenapi.java new file mode 100644 index 0000000..72300a2 --- /dev/null +++ b/src/main/java/br/com/acta/common/config/swagger/openapi/UsuarioCicloOpenapi.java @@ -0,0 +1,60 @@ +package br.com.acta.common.config.swagger.openapi; + +import br.com.acta.common.config.swagger.annotation.ApiAuthenticationResponses; +import br.com.acta.common.config.swagger.annotation.ApiResourceResponses; +import br.com.acta.common.config.swagger.annotation.ApiBadRequestResponse; +import br.com.acta.common.config.swagger.annotation.ApiBusinessRuleResponse; +import br.com.acta.common.config.swagger.annotation.ApiNotFoundResponse; +import br.com.acta.common.config.swagger.annotation.ApiUnsupportedMediaTypeResponse; +import br.com.acta.common.config.swagger.examples.SwaggerOpenapiDescriptions; +import br.com.acta.common.config.swagger.examples.SwaggerParameterDescriptions; +import br.com.acta.dto.join.usuario_ciclo.UsuarioCicloRequestDTO; +import br.com.acta.dto.join.usuario_ciclo.UsuarioCicloResponseDTO; +import br.com.acta.entity.enums.PapelCiclo; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.parameters.RequestBody; +import org.springframework.http.ResponseEntity; + +import java.util.List; + +@Tag(name = "Usuários do ciclo", description = SwaggerOpenapiDescriptions.USUARIO_CICLO_CONTROLLER) +public interface UsuarioCicloOpenapi { + + @Operation(summary = "Lista os usuários de um ciclo") + @ApiResponse(responseCode = "200", description = "Usuários encontrados", content = @Content(array = @ArraySchema(schema = @Schema(implementation = UsuarioCicloResponseDTO.class)))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + @ApiNotFoundResponse + ResponseEntity> buscar(@Parameter(description = SwaggerParameterDescriptions.ID_CICLO) Long idCiclo); + + @Operation(summary = "Adiciona um usuário ao ciclo") + @ApiResponse(responseCode = "201", description = "Usuário adicionado", content = @Content(schema = @Schema(implementation = UsuarioCicloResponseDTO.class))) + @ApiResourceResponses + @ApiBusinessRuleResponse + @ApiUnsupportedMediaTypeResponse + ResponseEntity inserir(@Parameter(description = SwaggerParameterDescriptions.ID_CICLO) Long idCiclo, @RequestBody(description = "Dados do vínculo entre usuário e ciclo", required = true) UsuarioCicloRequestDTO dto); + + @Operation(summary = "Atualiza o papel de um usuário no ciclo") + @ApiResponse(responseCode = "200", description = "Papel atualizado", content = @Content(schema = @Schema(implementation = UsuarioCicloResponseDTO.class))) + @ApiResourceResponses + @ApiBusinessRuleResponse + ResponseEntity patch(@Parameter(description = SwaggerParameterDescriptions.ID_CICLO) Long idCiclo, @Parameter(description = SwaggerParameterDescriptions.ID_USUARIO) Long idUsuario, @Parameter(description = SwaggerParameterDescriptions.PAPEL_CICLO) PapelCiclo papelCiclo); + + @Operation(summary = "Substitui o responsável pelo ciclo") + @ApiResponse(responseCode = "200", description = "Responsável substituído", content = @Content(array = @ArraySchema(schema = @Schema(implementation = UsuarioCicloResponseDTO.class)))) + @ApiResourceResponses + @ApiBusinessRuleResponse + ResponseEntity> substituirResponsavel(@Parameter(description = SwaggerParameterDescriptions.ID_CICLO) Long idCiclo, @Parameter(description = SwaggerParameterDescriptions.ID_USUARIO_ANTIGO) Long idUsuarioAntigo, @Parameter(description = SwaggerParameterDescriptions.ID_USUARIO_NOVO) Long idUsuarioNovo); + + @Operation(summary = "Remove um usuário do ciclo") + @ApiResponse(responseCode = "204", description = "Usuário removido") + @ApiResourceResponses + @ApiBusinessRuleResponse + ResponseEntity excluir(@Parameter(description = SwaggerParameterDescriptions.ID_CICLO) Long idCiclo, @Parameter(description = SwaggerParameterDescriptions.ID_USUARIO) Long idUsuario); +} diff --git a/src/main/java/br/com/acta/common/config/swagger/openapi/UsuarioOpenapi.java b/src/main/java/br/com/acta/common/config/swagger/openapi/UsuarioOpenapi.java new file mode 100644 index 0000000..f24acf1 --- /dev/null +++ b/src/main/java/br/com/acta/common/config/swagger/openapi/UsuarioOpenapi.java @@ -0,0 +1,71 @@ +package br.com.acta.common.config.swagger.openapi; + +import br.com.acta.common.config.swagger.annotation.ApiAuthenticationResponses; +import br.com.acta.common.config.swagger.annotation.ApiResourceResponses; +import br.com.acta.common.config.swagger.annotation.ApiBadRequestResponse; +import br.com.acta.common.config.swagger.annotation.ApiNotFoundResponse; +import br.com.acta.common.config.swagger.annotation.ApiUnsupportedMediaTypeResponse; +import br.com.acta.common.config.swagger.examples.SwaggerOpenapiDescriptions; +import br.com.acta.common.config.swagger.examples.SwaggerParameterDescriptions; +import br.com.acta.dto.core.usuario.UsuarioRequestDTO; +import br.com.acta.dto.core.usuario.UsuarioResponseDTO; +import br.com.acta.dto.join.usuario_ciclo.UsuarioCicloResponseDTO; +import br.com.acta.entity.enums.TipoUsuario; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.parameters.RequestBody; +import org.springframework.http.ResponseEntity; + +import java.util.List; +import java.util.Map; + +@Tag(name = "Usuários", description = SwaggerOpenapiDescriptions.USUARIO_CONTROLLER) +public interface UsuarioOpenapi { + + @Operation(summary = "Lista os ciclos de um usuário") + @ApiResponse(responseCode = "200", description = "Ciclos encontrados", content = @Content(array = @ArraySchema(schema = @Schema(implementation = UsuarioCicloResponseDTO.class)))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + @ApiNotFoundResponse + ResponseEntity> buscarCiclosUsuario(@Parameter(description = SwaggerParameterDescriptions.ID_USUARIO) Long idUsuario); + + @Operation(summary = "Lista os usuários de uma empresa") + @ApiResponse(responseCode = "200", description = "Usuários encontrados", content = @Content(array = @ArraySchema(schema = @Schema(implementation = UsuarioResponseDTO.class)))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + ResponseEntity> buscar(@Parameter(description = SwaggerParameterDescriptions.ID_EMPRESA) Long idEmpresa, @Parameter(description = SwaggerParameterDescriptions.TIPO_USUARIO) TipoUsuario tipo); + + @Operation(summary = "Busca um usuário") + @ApiResponse(responseCode = "200", description = "Usuário encontrado", content = @Content(schema = @Schema(implementation = UsuarioResponseDTO.class))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + @ApiNotFoundResponse + ResponseEntity buscarPorId(@Parameter(description = SwaggerParameterDescriptions.ID_USUARIO) Long id); + + @Operation(summary = "Cria um usuário") + @ApiResponse(responseCode = "201", description = "Usuário criado", content = @Content(schema = @Schema(implementation = UsuarioResponseDTO.class))) + @ApiResourceResponses + @ApiUnsupportedMediaTypeResponse + ResponseEntity inserir(@RequestBody(description = "Dados do usuário", required = true) UsuarioRequestDTO dto); + + @Operation(summary = "Atualiza parcialmente um usuário") + @ApiResponse(responseCode = "200", description = "Usuário atualizado", content = @Content(schema = @Schema(implementation = UsuarioResponseDTO.class))) + @ApiResourceResponses + @ApiUnsupportedMediaTypeResponse + ResponseEntity patch(@Parameter(description = SwaggerParameterDescriptions.ID_USUARIO) Long id, @RequestBody(description = SwaggerParameterDescriptions.CAMPOS_USUARIO, required = true) Map campos); + + @Operation(summary = "Remove a foto de um usuário") + @ApiResponse(responseCode = "200", description = "Foto removida", content = @Content(schema = @Schema(implementation = UsuarioResponseDTO.class))) + @ApiResourceResponses + ResponseEntity excluirFoto(@Parameter(description = SwaggerParameterDescriptions.ID_USUARIO) Long id); + + @Operation(summary = "Inativa um usuário") + @ApiResponse(responseCode = "204", description = "Usuário inativado") + @ApiResourceResponses + ResponseEntity excluir(@Parameter(description = SwaggerParameterDescriptions.ID_USUARIO) Long id); +} diff --git a/src/main/java/br/com/acta/common/config/swagger/openapi/UsuarioTreinamentoOpenapi.java b/src/main/java/br/com/acta/common/config/swagger/openapi/UsuarioTreinamentoOpenapi.java new file mode 100644 index 0000000..43637a0 --- /dev/null +++ b/src/main/java/br/com/acta/common/config/swagger/openapi/UsuarioTreinamentoOpenapi.java @@ -0,0 +1,52 @@ +package br.com.acta.common.config.swagger.openapi; + +import br.com.acta.common.config.swagger.annotation.ApiAuthenticationResponses; +import br.com.acta.common.config.swagger.annotation.ApiResourceResponses; +import br.com.acta.common.config.swagger.annotation.ApiBadRequestResponse; +import br.com.acta.common.config.swagger.annotation.ApiBusinessRuleResponse; +import br.com.acta.common.config.swagger.annotation.ApiUnsupportedMediaTypeResponse; +import br.com.acta.common.config.swagger.examples.SwaggerOpenapiDescriptions; +import br.com.acta.common.config.swagger.examples.SwaggerParameterDescriptions; +import br.com.acta.dto.join.usuario_treinamento.UsuarioTreinamentoRequestDTO; +import br.com.acta.dto.join.usuario_treinamento.UsuarioTreinamentoResponseDTO; +import br.com.acta.entity.enums.StatusTreinamento; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.parameters.RequestBody; +import org.springframework.http.ResponseEntity; + +import java.util.List; + +@Tag(name = "Usuários de treinamentos", description = SwaggerOpenapiDescriptions.USUARIO_TREINAMENTO_CONTROLLER) +public interface UsuarioTreinamentoOpenapi { + + @Operation(summary = "Lista os usuários de um treinamento") + @ApiResponse(responseCode = "200", description = "Usuários encontrados", content = @Content(array = @ArraySchema(schema = @Schema(implementation = UsuarioTreinamentoResponseDTO.class)))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + ResponseEntity> buscar(@Parameter(description = SwaggerParameterDescriptions.ID_TREINAMENTO) Long id); + + @Operation(summary = "Adiciona um usuário ao treinamento") + @ApiResponse(responseCode = "201", description = "Usuário adicionado", content = @Content(schema = @Schema(implementation = UsuarioTreinamentoResponseDTO.class))) + @ApiResourceResponses + @ApiBusinessRuleResponse + @ApiUnsupportedMediaTypeResponse + ResponseEntity inserir(@Parameter(description = SwaggerParameterDescriptions.ID_TREINAMENTO) Long id, @RequestBody(description = "Dados do vínculo entre usuário e treinamento", required = true) UsuarioTreinamentoRequestDTO dto); + + @Operation(summary = "Atualiza o status do usuário no treinamento") + @ApiResponse(responseCode = "200", description = "Status atualizado", content = @Content(schema = @Schema(implementation = UsuarioTreinamentoResponseDTO.class))) + @ApiResourceResponses + @ApiBusinessRuleResponse + ResponseEntity patchStatus(@Parameter(description = SwaggerParameterDescriptions.ID_TREINAMENTO) Long id, @Parameter(description = SwaggerParameterDescriptions.ID_USUARIO) Long idUsuario, @Parameter(description = SwaggerParameterDescriptions.NOVO_STATUS) StatusTreinamento status); + + @Operation(summary = "Remove um usuário do treinamento") + @ApiResponse(responseCode = "204", description = "Usuário removido") + @ApiResourceResponses + @ApiBusinessRuleResponse + ResponseEntity excluir(@Parameter(description = SwaggerParameterDescriptions.ID_TREINAMENTO) Long id, @Parameter(description = SwaggerParameterDescriptions.ID_USUARIO) Long idUsuario); +} diff --git a/src/main/java/br/com/acta/common/config/swagger/openapi/VerificacaoResultadoOpenapi.java b/src/main/java/br/com/acta/common/config/swagger/openapi/VerificacaoResultadoOpenapi.java new file mode 100644 index 0000000..450bd5f --- /dev/null +++ b/src/main/java/br/com/acta/common/config/swagger/openapi/VerificacaoResultadoOpenapi.java @@ -0,0 +1,62 @@ +package br.com.acta.common.config.swagger.openapi; + +import br.com.acta.common.config.swagger.annotation.ApiAuthenticationResponses; +import br.com.acta.common.config.swagger.annotation.ApiResourceResponses; +import br.com.acta.common.config.swagger.annotation.ApiBadRequestResponse; +import br.com.acta.common.config.swagger.annotation.ApiBusinessRuleResponse; +import br.com.acta.common.config.swagger.annotation.ApiNotFoundResponse; +import br.com.acta.common.config.swagger.annotation.ApiUnsupportedMediaTypeResponse; +import br.com.acta.common.config.swagger.examples.SwaggerOpenapiDescriptions; +import br.com.acta.common.config.swagger.examples.SwaggerParameterDescriptions; +import br.com.acta.dto.pdca.verificacao_resultado.VerificacaoResultadoRequestDTO; +import br.com.acta.dto.pdca.verificacao_resultado.VerificacaoResultadoResponseDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.parameters.RequestBody; +import org.springframework.http.ResponseEntity; + +import java.util.List; +import java.util.Map; + +@Tag(name = "Verificações de resultado", description = SwaggerOpenapiDescriptions.VERIFICACAO_RESULTADO_CONTROLLER) +public interface VerificacaoResultadoOpenapi { + + @Operation(summary = "Lista as verificações de um ciclo") + @ApiResponse(responseCode = "200", description = "Verificações encontradas", content = @Content(array = @ArraySchema(schema = @Schema(implementation = VerificacaoResultadoResponseDTO.class)))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + @ApiNotFoundResponse + ResponseEntity> buscar(@Parameter(description = SwaggerParameterDescriptions.ID_CICLO) Long idCiclo); + + @Operation(summary = "Busca uma verificação") + @ApiResponse(responseCode = "200", description = "Verificação encontrada", content = @Content(schema = @Schema(implementation = VerificacaoResultadoResponseDTO.class))) + @ApiAuthenticationResponses + @ApiBadRequestResponse + @ApiNotFoundResponse + ResponseEntity buscarPorId(@Parameter(description = SwaggerParameterDescriptions.ID_RESULTADO) Long id); + + @Operation(summary = "Cria uma verificação") + @ApiResponse(responseCode = "201", description = "Verificação criada", content = @Content(schema = @Schema(implementation = VerificacaoResultadoResponseDTO.class))) + @ApiResourceResponses + @ApiBusinessRuleResponse + @ApiUnsupportedMediaTypeResponse + ResponseEntity inserir(@Parameter(description = SwaggerParameterDescriptions.ID_CICLO) Long idCiclo, @Parameter(description = SwaggerParameterDescriptions.ID_CRIADO_POR) Long idCriadoPor, @RequestBody(description = "Dados da verificação de resultado", required = true) VerificacaoResultadoRequestDTO dto); + + @Operation(summary = "Atualiza parcialmente uma verificação") + @ApiResponse(responseCode = "200", description = "Verificação atualizada", content = @Content(schema = @Schema(implementation = VerificacaoResultadoResponseDTO.class))) + @ApiResourceResponses + @ApiBusinessRuleResponse + @ApiUnsupportedMediaTypeResponse + ResponseEntity patch(@Parameter(description = SwaggerParameterDescriptions.ID_RESULTADO) Long id, @RequestBody(description = SwaggerParameterDescriptions.CAMPOS_VERIFICACAO, required = true) Map campos); + + @Operation(summary = "Exclui uma verificação") + @ApiResponse(responseCode = "204", description = "Verificação excluída") + @ApiResourceResponses + @ApiBusinessRuleResponse + ResponseEntity excluir(@Parameter(description = SwaggerParameterDescriptions.ID_RESULTADO) Long id); +} diff --git a/src/main/java/br/com/acta/common/handler/GlobalExceptionHandler.java b/src/main/java/br/com/acta/common/handler/GlobalExceptionHandler.java index f01566c..6d3308a 100644 --- a/src/main/java/br/com/acta/common/handler/GlobalExceptionHandler.java +++ b/src/main/java/br/com/acta/common/handler/GlobalExceptionHandler.java @@ -123,7 +123,7 @@ public ResponseEntity handleNumberParseException(){ @ExceptionHandler(UniqueViolationException.class) public ResponseEntity handleUniqueViolation(UniqueViolationException uv){ - return ResponseEntity.status(HttpStatus.BAD_REQUEST) + return ResponseEntity.status(HttpStatus.CONFLICT) .body(new ErroResponse(List.of(uv.getMessage()), 409)); } diff --git a/src/main/java/br/com/acta/common/utils/ConversorObject.java b/src/main/java/br/com/acta/common/utils/ConversorObject.java index 79da114..6247390 100644 --- a/src/main/java/br/com/acta/common/utils/ConversorObject.java +++ b/src/main/java/br/com/acta/common/utils/ConversorObject.java @@ -8,9 +8,10 @@ import java.time.format.DateTimeParseException; public final class ConversorObject { - private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ISO_LOCAL_DATE; public static BigDecimal toBigDecimal(Object object) { + if (object == null) throw new InvalidRequestException("O valor informado é inválido"); try { return new BigDecimal(object.toString()); } catch (NumberFormatException nfe) { @@ -19,6 +20,7 @@ public static BigDecimal toBigDecimal(Object object) { } public static LocalDate toLocalDate(Object object, boolean ehPassado) { + if (object == null) throw new InvalidRequestException("A data deve estar no formato yyyy-MM-dd"); String dataString = object.toString(); if (!dataString.matches("\\d{4}-\\d{2}-\\d{2}")) @@ -40,24 +42,36 @@ public static LocalDate toLocalDate(Object object, boolean ehPassado) { } public static LocalDate toLocalDate(Object object) { + if (object == null) throw new InvalidRequestException("A data deve estar no formato yyyy-MM-dd"); String dataString = object.toString(); if (!dataString.matches("\\d{4}-\\d{2}-\\d{2}")) throw new InvalidRequestException("A data deve estar no formato yyyy-MM-dd"); - return LocalDate.parse(dataString, DATE_TIME_FORMATTER); + try { + return LocalDate.parse(dataString, DATE_TIME_FORMATTER); + } catch (DateTimeParseException dtpe) { + throw new InvalidRequestException("A data deve estar no formato yyyy-MM-dd"); + } } public static Long toLong(Object object) { + if (object == null) throw new InvalidRequestException("O valor deve ser um número"); String valor = object.toString(); if (!valor.matches("\\d+")) throw new InvalidRequestException("O valor deve ser um número"); - long valorLong = Long.parseLong(valor); + long valorLong; + try { + valorLong = Long.parseLong(valor); + } catch (NumberFormatException nfe) { + throw new InvalidRequestException("O valor deve ser um número válido"); + } if (valorLong <= 0) throw new InvalidRequestException("O valor deve ser maior que 0"); return valorLong; } public static > T toEnum(Object valor, Class enumClass) throws IllegalArgumentException { + if (valor == null) throw new InvalidRequestException("O valor informado é inválido"); try { return Enum.valueOf(enumClass, valor.toString().toUpperCase()); } catch (IllegalArgumentException iae) { diff --git a/src/main/java/br/com/acta/controller/AlertaPrazoController.java b/src/main/java/br/com/acta/controller/AlertaPrazoController.java index 0c13cfe..fecf2c9 100644 --- a/src/main/java/br/com/acta/controller/AlertaPrazoController.java +++ b/src/main/java/br/com/acta/controller/AlertaPrazoController.java @@ -1,5 +1,6 @@ package br.com.acta.controller; +import br.com.acta.common.config.swagger.openapi.AlertaPrazoOpenapi; import br.com.acta.dto.pdca.alerta_prazo.AlertaPrazoResponseDTO; import br.com.acta.service.AlertaPrazoService; import jakarta.validation.constraints.Positive; @@ -13,16 +14,18 @@ @RestController @RequestMapping(value = "/api/v1/tarefa/{idTarefa}/alerta", produces = MediaType.APPLICATION_JSON_VALUE) @RequiredArgsConstructor -public class AlertaPrazoController { +public class AlertaPrazoController implements AlertaPrazoOpenapi { private final AlertaPrazoService service; @GetMapping + @Override public ResponseEntity buscar(@PathVariable @Positive Long idTarefa) { AlertaPrazoResponseDTO alerta = service.buscar(idTarefa); return ResponseEntity.ok(alerta); } @PatchMapping("/{id}") + @Override public ResponseEntity marcarLido(@PathVariable @Positive Long idTarefa, @PathVariable @Positive Long id, @RequestParam @Positive Long idUsuario) { AlertaPrazoResponseDTO alerta = service.marcarLido(idTarefa, id, idUsuario); return ResponseEntity.ok(alerta); diff --git a/src/main/java/br/com/acta/controller/AuthController.java b/src/main/java/br/com/acta/controller/AuthController.java index e6505e9..5eff80e 100644 --- a/src/main/java/br/com/acta/controller/AuthController.java +++ b/src/main/java/br/com/acta/controller/AuthController.java @@ -2,6 +2,7 @@ import br.com.acta.common.config.firebase.FirebaseAuthFilter.FirebaseIdentity; import br.com.acta.common.config.firebase.UsuarioAutenticado; +import br.com.acta.common.config.swagger.openapi.AuthOpenapi; import br.com.acta.dto.auth.MeResponseDTO; import br.com.acta.dto.auth.AuthMapper; import br.com.acta.service.AuthService; @@ -17,16 +18,18 @@ @RestController @RequestMapping(value = "/api/v1", produces = MediaType.APPLICATION_JSON_VALUE) @RequiredArgsConstructor -public class AuthController { +public class AuthController implements AuthOpenapi { private final AuthService service; private final AuthMapper mapper; @GetMapping("/me") + @Override public ResponseEntity me(@AuthenticationPrincipal UsuarioAutenticado usuario) { return ResponseEntity.ok(mapper.toMeResponse(usuario)); } @PostMapping("/auth/ativar") + @Override public ResponseEntity ativar(@AuthenticationPrincipal FirebaseIdentity identity) { return ResponseEntity.ok(service.ativar(identity)); } diff --git a/src/main/java/br/com/acta/controller/CausaRaizController.java b/src/main/java/br/com/acta/controller/CausaRaizController.java index 5478bda..2dcc3fd 100644 --- a/src/main/java/br/com/acta/controller/CausaRaizController.java +++ b/src/main/java/br/com/acta/controller/CausaRaizController.java @@ -1,5 +1,6 @@ package br.com.acta.controller; +import br.com.acta.common.config.swagger.openapi.CausaRaizOpenapi; import br.com.acta.dto.pdca.causa_raiz.CausaRaizRequestDTO; import br.com.acta.dto.pdca.causa_raiz.CausaRaizResponseDTO; import br.com.acta.service.CausaRaizService; @@ -18,40 +19,46 @@ @RestController @RequestMapping(value = "/api/v1", produces = MediaType.APPLICATION_JSON_VALUE) @RequiredArgsConstructor -public class CausaRaizController { +public class CausaRaizController implements CausaRaizOpenapi { private final CausaRaizService service; @GetMapping("/ciclos/{idCiclo}/causas-raiz") + @Override public ResponseEntity> buscar(@PathVariable @Positive Long idCiclo, @RequestParam(required = false) Boolean aceita, @RequestParam(required = false) Boolean principal, @RequestParam(required = false) Long idProblema) { List ciclos = service.buscar(idCiclo, idProblema, aceita, principal); return ResponseEntity.ok(ciclos); } @GetMapping("/causas-raiz/{id}") + @Override public ResponseEntity buscar(@PathVariable @Positive Long id) { CausaRaizResponseDTO ciclo = service.buscar(id); return ResponseEntity.ok(ciclo); } @PostMapping("/ciclos/{idCiclo}/causas-raiz") + @Override public ResponseEntity inserir(@PathVariable @Positive Long idCiclo, @Valid @RequestBody CausaRaizRequestDTO dto) { CausaRaizResponseDTO ciclo = service.inserir(dto, idCiclo); return ResponseEntity.status(201).body(ciclo); } @PatchMapping("/causas-raiz/{id}") + @Override public ResponseEntity patch(@PathVariable @Positive Long id, @RequestBody Map campos) { CausaRaizResponseDTO ciclo = service.patch(id, campos); return ResponseEntity.ok(ciclo); } @PatchMapping("/causas-raiz/{id}/validar") + @Override public ResponseEntity validar(@PathVariable @Positive Long id, @RequestParam @Positive Long idUsuario, @RequestParam Boolean aceita) { CausaRaizResponseDTO ciclo = service.validar(id, idUsuario, aceita); return ResponseEntity.ok(ciclo); } @DeleteMapping("/causas-raiz/{id}") + @Override public ResponseEntity excluir(@PathVariable @Positive Long id) { service.excluir(id); return ResponseEntity.noContent().build(); diff --git a/src/main/java/br/com/acta/controller/CicloController.java b/src/main/java/br/com/acta/controller/CicloController.java index 11a91a7..12a5720 100644 --- a/src/main/java/br/com/acta/controller/CicloController.java +++ b/src/main/java/br/com/acta/controller/CicloController.java @@ -1,5 +1,6 @@ package br.com.acta.controller; +import br.com.acta.common.config.swagger.openapi.CicloOpenapi; import br.com.acta.dto.pdca.ciclo.CicloRequestDTO; import br.com.acta.dto.pdca.ciclo.CicloResponseDTO; import br.com.acta.entity.enums.StatusCiclo; @@ -19,10 +20,11 @@ @RestController @RequestMapping(value = "api/v1/ciclo", produces = MediaType.APPLICATION_JSON_VALUE) @RequiredArgsConstructor -public class CicloController {//implements CicloOpenapi { +public class CicloController implements CicloOpenapi { private final CicloService service; @GetMapping + @Override public ResponseEntity> buscar(@RequestParam(required = false) @Positive Long idEmpresa, @RequestParam(required = false) @Positive Long idGestor, @RequestParam(required = false) StatusCiclo status) { List ciclos = service.buscarPorStatus(idEmpresa, idGestor, status); @@ -30,36 +32,42 @@ public ResponseEntity> buscar(@RequestParam(required = fa } @GetMapping("/{id}") + @Override public ResponseEntity buscar(@PathVariable @Positive Long id) { CicloResponseDTO ciclo = service.buscar(id); return ResponseEntity.ok(ciclo); } @PostMapping + @Override public ResponseEntity inserir(@RequestBody @Valid CicloRequestDTO cicloRequest) { CicloResponseDTO ciclo = service.inserir(cicloRequest); return ResponseEntity.status(201).body(ciclo); } @PatchMapping("/{id}") + @Override public ResponseEntity patch(@PathVariable @Positive Long id, @RequestBody Map campos) { CicloResponseDTO ciclo = service.patch(id, campos); return ResponseEntity.ok(ciclo); } @PatchMapping("/{id}/status") + @Override public ResponseEntity patchStatus(@PathVariable @Positive Long id, @RequestParam StatusCiclo status) { CicloResponseDTO ciclo = service.patchStatus(id, status); return ResponseEntity.ok(ciclo); } @DeleteMapping("/{id}") + @Override public ResponseEntity excluir(@PathVariable @Positive Long id) { service.excluir(id); return ResponseEntity.noContent().build(); } @GetMapping("/avanco/{id}") + @Override public ResponseEntity avancoCiclo(@PathVariable @Positive Long id) { Double avanco = service.avancoCiclo(id); return ResponseEntity.ok(avanco); diff --git a/src/main/java/br/com/acta/controller/ColaboradorController.java b/src/main/java/br/com/acta/controller/ColaboradorController.java index 2b7bbaf..2408edc 100644 --- a/src/main/java/br/com/acta/controller/ColaboradorController.java +++ b/src/main/java/br/com/acta/controller/ColaboradorController.java @@ -1,5 +1,6 @@ package br.com.acta.controller; +import br.com.acta.common.config.swagger.openapi.ColaboradorOpenapi; import br.com.acta.dto.core.colaborador.ColaboradorRequestDTO; import br.com.acta.dto.core.colaborador.ColaboradorResponseDTO; import br.com.acta.service.ColaboradorService; @@ -19,40 +20,46 @@ @RestController @RequestMapping(value = "api/v1/colaborador", produces = MediaType.APPLICATION_JSON_VALUE) @RequiredArgsConstructor -public class ColaboradorController { +public class ColaboradorController implements ColaboradorOpenapi { private final ColaboradorService service; @GetMapping("empresa/{idEmpresa}") + @Override public ResponseEntity> buscarPorEmpresa(@PathVariable @Positive Long idEmpresa){ List colaboradores = service.buscarPorEmpresa(idEmpresa); return ResponseEntity.ok(colaboradores); } @GetMapping + @Override public ResponseEntity> buscar() { List colaboradores = service.buscar(); return ResponseEntity.ok(colaboradores); } @GetMapping("/{id}") + @Override public ResponseEntity buscar(@PathVariable @Positive Long id) { ColaboradorResponseDTO colaborador = service.buscar(id); return ResponseEntity.ok(colaborador); } @PostMapping + @Override public ResponseEntity inserir(@RequestBody @Valid ColaboradorRequestDTO dto) { ColaboradorResponseDTO colaborador = service.inserir(dto); return ResponseEntity.status(201).body(colaborador); } @PatchMapping("/{id}") + @Override public ResponseEntity patch(@PathVariable @Positive Long id, @RequestBody Map dto) { ColaboradorResponseDTO colaborador = service.patch(id, dto); return ResponseEntity.ok(colaborador); } @DeleteMapping("/{id}") + @Override public ResponseEntity excluir(@PathVariable @Positive Long id) { service.excluir(id); return ResponseEntity.noContent().build(); diff --git a/src/main/java/br/com/acta/controller/EfeitoSecundarioController.java b/src/main/java/br/com/acta/controller/EfeitoSecundarioController.java index c3c0bd4..59320c3 100644 --- a/src/main/java/br/com/acta/controller/EfeitoSecundarioController.java +++ b/src/main/java/br/com/acta/controller/EfeitoSecundarioController.java @@ -1,5 +1,6 @@ package br.com.acta.controller; +import br.com.acta.common.config.swagger.openapi.EfeitoSecundarioOpenapi; import br.com.acta.dto.pdca.efeito_secundario.EfeitoSecundarioRequestDTO; import br.com.acta.dto.pdca.efeito_secundario.EfeitoSecundarioResponseDTO; import br.com.acta.service.EfeitoSecundarioService; @@ -18,28 +19,32 @@ @RestController @RequestMapping(value = "api/v1/verificacao/{idResultado}/efeito-secundario", produces = MediaType.APPLICATION_JSON_VALUE) @RequiredArgsConstructor -public class EfeitoSecundarioController { +public class EfeitoSecundarioController implements EfeitoSecundarioOpenapi { private final EfeitoSecundarioService service; @GetMapping + @Override public ResponseEntity> buscarEfeitosSecundarios(@PathVariable @Positive Long idResultado) { List efeitoSecundario = service.buscar(idResultado); return ResponseEntity.ok(efeitoSecundario); } @PostMapping + @Override public ResponseEntity inserir(@PathVariable @Positive Long idResultado, @RequestBody @Valid EfeitoSecundarioRequestDTO dto) { EfeitoSecundarioResponseDTO efeitoSecundario = service.inserir(idResultado, dto); return ResponseEntity.status(201).body(efeitoSecundario); } @PatchMapping("{idEfeitoSecundario}") + @Override public ResponseEntity patch(@PathVariable @Positive Long idResultado, @PathVariable @Positive Long idEfeitoSecundario, @RequestBody Map campos) { EfeitoSecundarioResponseDTO efeitoSecundario = service.patch(idResultado, idEfeitoSecundario, campos); return ResponseEntity.ok(efeitoSecundario); } @DeleteMapping("/{idEfeitoSecundario}") + @Override public ResponseEntity excluir(@PathVariable @Positive Long idResultado, @PathVariable @Positive Long idEfeitoSecundario) { service.excluir(idResultado, idEfeitoSecundario); return ResponseEntity.noContent().build(); diff --git a/src/main/java/br/com/acta/controller/EmpresaController.java b/src/main/java/br/com/acta/controller/EmpresaController.java index 050a1ee..bcecd69 100644 --- a/src/main/java/br/com/acta/controller/EmpresaController.java +++ b/src/main/java/br/com/acta/controller/EmpresaController.java @@ -1,5 +1,6 @@ package br.com.acta.controller; +import br.com.acta.common.config.swagger.openapi.EmpresaOpenapi; import br.com.acta.dto.core.empresa.EmpresaRequestDTO; import br.com.acta.dto.core.empresa.EmpresaResponseDTO; import br.com.acta.entity.enums.TamanhoEmpresa; @@ -19,34 +20,39 @@ @RestController @RequestMapping(value = "api/v1/empresa", produces = MediaType.APPLICATION_JSON_VALUE) @RequiredArgsConstructor -public class EmpresaController { +public class EmpresaController implements EmpresaOpenapi { private final EmpresaService service; @GetMapping + @Override public ResponseEntity> buscar(@RequestParam(required = false) TamanhoEmpresa tamanho) { List empresas = service.buscar(tamanho); return ResponseEntity.ok(empresas); } @GetMapping("/{id}") + @Override public ResponseEntity buscar(@PathVariable @Positive Long id) { EmpresaResponseDTO empresa = service.buscar(id); return ResponseEntity.ok(empresa); } @PostMapping + @Override public ResponseEntity inserir(@RequestBody @Valid EmpresaRequestDTO dto) { EmpresaResponseDTO empresa = service.inserir(dto); return ResponseEntity.status(201).body(empresa); } @PatchMapping("/{id}") + @Override public ResponseEntity patch(@PathVariable @Positive Long id, @RequestBody Map campos) { EmpresaResponseDTO empresa = service.patch(id, campos); return ResponseEntity.ok(empresa); } @DeleteMapping("/{id}") + @Override public ResponseEntity excluir(@PathVariable @Positive Long id) { service.excluir(id); return ResponseEntity.noContent().build(); diff --git a/src/main/java/br/com/acta/controller/EnderecoEmpresaController.java b/src/main/java/br/com/acta/controller/EnderecoEmpresaController.java index f53ef1a..bb6664d 100644 --- a/src/main/java/br/com/acta/controller/EnderecoEmpresaController.java +++ b/src/main/java/br/com/acta/controller/EnderecoEmpresaController.java @@ -1,5 +1,6 @@ package br.com.acta.controller; +import br.com.acta.common.config.swagger.openapi.EnderecoEmpresaOpenapi; import br.com.acta.dto.core.empresa.endereco.EnderecoRequestDTO; import br.com.acta.dto.core.empresa.endereco.EnderecoResponseDTO; import br.com.acta.service.EnderecoEmpresaService; @@ -17,28 +18,32 @@ @RestController @RequestMapping(value = "api/v1/empresa/{idEmpresa}/endereco", produces = MediaType.APPLICATION_JSON_VALUE) @RequiredArgsConstructor -public class EnderecoEmpresaController { +public class EnderecoEmpresaController implements EnderecoEmpresaOpenapi { private final EnderecoEmpresaService service; @GetMapping("/{idEndereco}") + @Override public ResponseEntity buscar(@PathVariable @Positive Long idEmpresa, @PathVariable @Positive Long idEndereco){ EnderecoResponseDTO endereco = service.buscarEndereco(idEmpresa, idEndereco); return ResponseEntity.ok(endereco); } @GetMapping + @Override public ResponseEntity> buscar(@PathVariable @Positive Long idEmpresa){ List enderecos = service.buscarEndereco(idEmpresa); return ResponseEntity.ok(enderecos); } @PostMapping + @Override public ResponseEntity inserir(@PathVariable @Positive Long idEmpresa, @Valid @RequestBody EnderecoRequestDTO dto){ EnderecoResponseDTO endereco = service.inserirEndereco(idEmpresa, dto); return ResponseEntity.status(201).body(endereco); } @DeleteMapping("/{idEndereco}") + @Override public ResponseEntity excluir(@PathVariable @Positive Long idEmpresa, @PathVariable @Positive Long idEndereco){ service.excluirEndereco(idEmpresa, idEndereco); return ResponseEntity.noContent().build(); diff --git a/src/main/java/br/com/acta/controller/HealthController.java b/src/main/java/br/com/acta/controller/HealthController.java index 5bea1af..2781840 100644 --- a/src/main/java/br/com/acta/controller/HealthController.java +++ b/src/main/java/br/com/acta/controller/HealthController.java @@ -1,5 +1,6 @@ package br.com.acta.controller; +import br.com.acta.common.config.swagger.openapi.HealthOpenapi; import br.com.acta.dto.health.HealthResponseDTO; import br.com.acta.dto.health.HealthStatus; import br.com.acta.service.HealthService; @@ -13,10 +14,11 @@ @RestController @RequestMapping(value = "api/v1/health", produces = MediaType.APPLICATION_JSON_VALUE) @RequiredArgsConstructor -public class HealthController { +public class HealthController implements HealthOpenapi { private final HealthService service; @GetMapping + @Override public ResponseEntity verificar() { HealthResponseDTO dto = service.verificar(); diff --git a/src/main/java/br/com/acta/controller/MetaController.java b/src/main/java/br/com/acta/controller/MetaController.java index d3ab8ab..f70f90f 100644 --- a/src/main/java/br/com/acta/controller/MetaController.java +++ b/src/main/java/br/com/acta/controller/MetaController.java @@ -1,5 +1,6 @@ package br.com.acta.controller; +import br.com.acta.common.config.swagger.openapi.MetaOpenapi; import br.com.acta.dto.core.usuario.UsuarioSummaryResponseDTO; import br.com.acta.dto.pdca.meta.MetaRequestDTO; import br.com.acta.dto.pdca.meta.MetaResponseDTO; @@ -22,58 +23,67 @@ @RestController @RequestMapping(value = "api/v1", produces = MediaType.APPLICATION_JSON_VALUE) @RequiredArgsConstructor -public class MetaController { +public class MetaController implements MetaOpenapi { private final MetaService service; @GetMapping("/ciclos/{idCiclo}/meta") + @Override public ResponseEntity> buscar(@PathVariable @Positive Long idCiclo, @RequestParam(required = false) StatusMeta status, @RequestParam(required = false) Prioridade prioridade) { List metas = service.buscar(idCiclo, status, prioridade); return ResponseEntity.ok(metas); } @GetMapping("/meta/{id}") + @Override public ResponseEntity buscar(@PathVariable @Positive Long id) { MetaResponseDTO meta = service.buscar(id); return ResponseEntity.ok(meta); } @PostMapping("/plano-acao/{idPlanoAcao}/meta") + @Override public ResponseEntity inserir(@PathVariable @Positive Long idPlanoAcao, @Valid @RequestBody MetaRequestDTO dto) { MetaResponseDTO meta = service.inserir(idPlanoAcao, dto); return ResponseEntity.status(201).body(meta); } @PatchMapping("/meta/{id}") + @Override public ResponseEntity patch(@PathVariable @Positive Long id, @RequestBody Map dto) { MetaResponseDTO meta = service.patch(id, dto); return ResponseEntity.ok(meta); } @PatchMapping("/meta/{id}/status") + @Override public ResponseEntity patchStatus(@PathVariable @Positive Long id, StatusMeta status) { MetaResponseDTO meta = service.patchStatus(id, status); return ResponseEntity.ok(meta); } @DeleteMapping("/meta/{id}") + @Override public ResponseEntity delete(@PathVariable @Positive Long id) { service.excluir(id); return ResponseEntity.noContent().build(); } @GetMapping("/meta/{id}/responsaveis") + @Override public ResponseEntity> buscarResponsaveis(@PathVariable @Positive Long id) { List responsaveis = service.buscarResponsaveis(id); return ResponseEntity.ok(responsaveis); } @PostMapping("/meta/{id}/responsaveis") + @Override public ResponseEntity> adicionarResponsavel(@RequestParam @NotEmpty List<@Positive Long> idsResponsaveis, @PathVariable Long id) { List responsaveis = service.inserirResponsaveis(id, idsResponsaveis); return ResponseEntity.status(201).body(responsaveis); } @DeleteMapping("/meta/{id}/responsaveis") + @Override public ResponseEntity excluirResponsaveis(@PathVariable Long id, @RequestParam List idsResponsaveis) { service.excluirResponsaveis(id, idsResponsaveis); return ResponseEntity.noContent().build(); diff --git a/src/main/java/br/com/acta/controller/Plano5W2HController.java b/src/main/java/br/com/acta/controller/Plano5W2HController.java index acd5671..c06f11c 100644 --- a/src/main/java/br/com/acta/controller/Plano5W2HController.java +++ b/src/main/java/br/com/acta/controller/Plano5W2HController.java @@ -1,5 +1,6 @@ package br.com.acta.controller; +import br.com.acta.common.config.swagger.openapi.Plano5W2HOpenapi; import br.com.acta.dto.pdca.plano_5w2h.Plano5W2HRequestDTO; import br.com.acta.dto.pdca.plano_5w2h.Plano5W2HResponseDTO; import br.com.acta.service.Plano5W2HService; @@ -17,28 +18,32 @@ @RestController @RequestMapping(value = "api/v1", produces = MediaType.APPLICATION_JSON_VALUE) @RequiredArgsConstructor -public class Plano5W2HController { +public class Plano5W2HController implements Plano5W2HOpenapi { private final Plano5W2HService service; @GetMapping("plano-acao/{idPlanoAcao}/5w2h") + @Override public ResponseEntity buscar(@PathVariable @Positive Long idPlanoAcao) { Plano5W2HResponseDTO plano = service.buscarPorPlanoAcao(idPlanoAcao); return ResponseEntity.ok(plano); } @PostMapping("plano-acao/{idPlanoAcao}/5w2h") + @Override public ResponseEntity inserir(@PathVariable @Positive Long idPlanoAcao, @Valid @RequestBody Plano5W2HRequestDTO dto) { Plano5W2HResponseDTO plano = service.inserir(dto, idPlanoAcao); return ResponseEntity.status(201).body(plano); } @PatchMapping("plano-acao/5w2h/{id}") + @Override public ResponseEntity patch(@PathVariable @Positive Long id, @RequestBody Map campos) { Plano5W2HResponseDTO plano = service.patch(id, campos); return ResponseEntity.ok(plano); } @DeleteMapping("plano-acao/5w2h/{id}") + @Override public ResponseEntity excluir(@PathVariable @Positive Long id) { service.excluir(id); return ResponseEntity.noContent().build(); diff --git a/src/main/java/br/com/acta/controller/PlanoAcaoController.java b/src/main/java/br/com/acta/controller/PlanoAcaoController.java index 9a06b10..7f174ed 100644 --- a/src/main/java/br/com/acta/controller/PlanoAcaoController.java +++ b/src/main/java/br/com/acta/controller/PlanoAcaoController.java @@ -1,5 +1,6 @@ package br.com.acta.controller; +import br.com.acta.common.config.swagger.openapi.PlanoAcaoOpenapi; import br.com.acta.dto.pdca.plano_acao.PlanoAcaoRequestDTO; import br.com.acta.dto.pdca.plano_acao.PlanoAcaoResponseDTO; import br.com.acta.entity.enums.Prioridade; @@ -20,40 +21,46 @@ @RestController @RequestMapping(value = "api/v1", produces = MediaType.APPLICATION_JSON_VALUE) @RequiredArgsConstructor -public class PlanoAcaoController { +public class PlanoAcaoController implements PlanoAcaoOpenapi { private final PlanoAcaoService service; @GetMapping("/ciclo/{idCiclo}/plano-acao") + @Override public ResponseEntity> buscar(@PathVariable @Positive Long idCiclo, @RequestParam(required = false) StatusPlanoAcao status, @RequestParam(required = false) Prioridade prioridade) { List planos = service.buscar(idCiclo, status, prioridade); return ResponseEntity.ok(planos); } @GetMapping("/plano-acao/{id}") + @Override public ResponseEntity buscar(@PathVariable @Positive Long id) { PlanoAcaoResponseDTO plano = service.buscar(id); return ResponseEntity.ok(plano); } @PostMapping("/ciclo/{idCiclo}/plano-acao") + @Override public ResponseEntity inserir(@PathVariable @Positive Long idCiclo, @Valid @RequestBody PlanoAcaoRequestDTO dto, @RequestParam @Positive Long idCriadoPor) { PlanoAcaoResponseDTO plano = service.inserir(dto, idCiclo, idCriadoPor); return ResponseEntity.status(201).body(plano); } @PatchMapping("/plano-acao/{id}") + @Override public ResponseEntity patch(@PathVariable @Positive Long id, @RequestBody Map campos) { PlanoAcaoResponseDTO plano = service.patch(id, campos); return ResponseEntity.ok(plano); } @PatchMapping("/plano-acao/{id}/status") + @Override public ResponseEntity patchStatus(@PathVariable @Positive Long id, @RequestParam StatusPlanoAcao status) { PlanoAcaoResponseDTO plano = service.patchStatus(id, status); return ResponseEntity.ok(plano); } @DeleteMapping("/plano-acao/{id}") + @Override public ResponseEntity excluir(@PathVariable @Positive Long id) { service.excluir(id); return ResponseEntity.noContent().build(); diff --git a/src/main/java/br/com/acta/controller/PriorizacaoProblemaController.java b/src/main/java/br/com/acta/controller/PriorizacaoProblemaController.java index 334aba7..9b68c8c 100644 --- a/src/main/java/br/com/acta/controller/PriorizacaoProblemaController.java +++ b/src/main/java/br/com/acta/controller/PriorizacaoProblemaController.java @@ -1,5 +1,6 @@ package br.com.acta.controller; +import br.com.acta.common.config.swagger.openapi.PriorizacaoProblemaOpenapi; import br.com.acta.dto.join.priorizacao_problema.PriorizacaoProblemaRequestDTO; import br.com.acta.dto.join.priorizacao_problema.PriorizacaoProblemaResponseDTO; import br.com.acta.dto.pdca.problema.ProblemaResponseDTO; @@ -19,28 +20,32 @@ @RestController @RequestMapping(value = "api/v1/problema/{idProblema}/priorizacao", produces = MediaType.APPLICATION_JSON_VALUE) @RequiredArgsConstructor -public class PriorizacaoProblemaController { +public class PriorizacaoProblemaController implements PriorizacaoProblemaOpenapi { private final PriorizacaoProblemaService service; @GetMapping + @Override public ResponseEntity> buscar(@PathVariable @Positive Long idProblema, @RequestParam(required = false) Long idUsuario) { List priorizacao = service.buscar(idProblema, idUsuario); return ResponseEntity.ok(priorizacao); } @PostMapping + @Override public ResponseEntity inserir(@PathVariable @Positive Long idProblema, @RequestBody @Valid PriorizacaoProblemaRequestDTO dto) { PriorizacaoProblemaResponseDTO priorizacao = service.inserir(idProblema, dto); return ResponseEntity.status(201).body(priorizacao); } @PatchMapping("/{idUsuario}") + @Override public ResponseEntity patch(@PathVariable @Positive Long idProblema, @PathVariable @Positive Long idUsuario, @RequestBody Map campos) { PriorizacaoProblemaResponseDTO priorizacao = service.patch(idProblema, idUsuario, campos); return ResponseEntity.ok(priorizacao); } @PatchMapping("/aplicar-peso") + @Override public ResponseEntity aplicarPeso(@PathVariable @Positive Long idProblema){ ProblemaResponseDTO priorizacao = service.aplicarPeso(idProblema); return ResponseEntity.ok(priorizacao); diff --git a/src/main/java/br/com/acta/controller/ProblemaController.java b/src/main/java/br/com/acta/controller/ProblemaController.java index d2c9f72..6dfff3b 100644 --- a/src/main/java/br/com/acta/controller/ProblemaController.java +++ b/src/main/java/br/com/acta/controller/ProblemaController.java @@ -1,5 +1,6 @@ package br.com.acta.controller; +import br.com.acta.common.config.swagger.openapi.ProblemaOpenapi; import br.com.acta.dto.pdca.problema.ProblemaRequestDTO; import br.com.acta.dto.pdca.problema.ProblemaResponseDTO; import br.com.acta.entity.enums.StatusProblema; @@ -19,40 +20,46 @@ @RestController @RequestMapping(value = "api/v1", produces = MediaType.APPLICATION_JSON_VALUE) @RequiredArgsConstructor -public class ProblemaController { +public class ProblemaController implements ProblemaOpenapi { private final ProblemaService service; @GetMapping("/ciclo/{idCiclo}/problema") + @Override public ResponseEntity> buscar(@PathVariable @Positive Long idCiclo, @RequestParam(required = false) StatusProblema status, @RequestParam(required = false) @Positive Long idProblemaPai) { List problemas = service.buscar(idCiclo, status, idProblemaPai); return ResponseEntity.ok(problemas); } @GetMapping("/problema/{id}") + @Override public ResponseEntity buscar(@PathVariable @Positive Long id) { ProblemaResponseDTO problema = service.buscar(id); return ResponseEntity.ok(problema); } @PostMapping("/ciclos/{idCiclo}/problema") + @Override public ResponseEntity inserir(@PathVariable @Positive Long idCiclo, @RequestBody @Valid ProblemaRequestDTO dto) { ProblemaResponseDTO problema = service.inserir(dto, idCiclo); return ResponseEntity.status(201).body(problema); } @PatchMapping("/problema/{id}") + @Override public ResponseEntity patch(@PathVariable @Positive Long id, @RequestBody Map campos) { ProblemaResponseDTO problema = service.patch(id, campos); return ResponseEntity.ok(problema); } @PatchMapping("/problema/{id}/status") + @Override public ResponseEntity patchStatus(@PathVariable @Positive Long id, @RequestParam StatusProblema status) { ProblemaResponseDTO problema = service.patchStatus(id, status); return ResponseEntity.ok(problema); } @DeleteMapping("/problema/{id}") + @Override public ResponseEntity excluir(@PathVariable @Positive Long id) { service.excluir(id); return ResponseEntity.noContent().build(); diff --git a/src/main/java/br/com/acta/controller/TarefaController.java b/src/main/java/br/com/acta/controller/TarefaController.java index 3e4120a..03a2282 100644 --- a/src/main/java/br/com/acta/controller/TarefaController.java +++ b/src/main/java/br/com/acta/controller/TarefaController.java @@ -1,5 +1,6 @@ package br.com.acta.controller; +import br.com.acta.common.config.swagger.openapi.TarefaOpenapi; import br.com.acta.dto.pdca.tarefa.TarefaRequestDTO; import br.com.acta.dto.pdca.tarefa.TarefaResponseDTO; import br.com.acta.dto.pdca.tarefa.TarefaStatusUpdateDTO; @@ -22,52 +23,60 @@ @RestController @RequestMapping(value = "api/v1", produces = MediaType.APPLICATION_JSON_VALUE) @RequiredArgsConstructor -public class TarefaController { +public class TarefaController implements TarefaOpenapi { private final TarefaService service; @GetMapping("/plano-acao/{idPlanoAcao}/tarefa") + @Override public ResponseEntity> buscar(@PathVariable Long idPlanoAcao, @RequestParam(required = false) StatusTarefa status, @RequestParam(required = false) Long idResponsavel, @RequestParam(required = false) Prioridade prioridade) { List tarefas = service.buscar(idPlanoAcao, status, idResponsavel, prioridade); return ResponseEntity.ok(tarefas); } @GetMapping("/tarefa/{id}") + @Override public ResponseEntity buscar(@PathVariable @Positive Long id) { TarefaResponseDTO tarefa = service.buscar(id); return ResponseEntity.ok(tarefa); } @PostMapping("/plano-acao/{idPlanoAcao}/tarefa") + @Override public ResponseEntity inserir(@PathVariable @Positive Long idPlanoAcao, @Valid @RequestBody TarefaRequestDTO dto) { TarefaResponseDTO tarefa = service.inserir(idPlanoAcao, dto); return ResponseEntity.status(201).body(tarefa); } @PatchMapping("/tarefa/{id}") + @Override public ResponseEntity patch(@PathVariable @Positive Long id, @RequestBody Map campos) { TarefaResponseDTO tarefa = service.patch(id, campos); return ResponseEntity.ok(tarefa); } @PatchMapping("/tarefa/{id}/status") + @Override public ResponseEntity patchStatus(@PathVariable @Positive Long id, @RequestBody @Valid TarefaStatusUpdateDTO dto) { TarefaResponseDTO tarefa = service.patchStatus(id, dto); return ResponseEntity.ok(tarefa); } @PatchMapping("/tarefa/{id}/reabrir") + @Override public ResponseEntity reabrir(@PathVariable @Positive Long id, @RequestParam LocalDate novoPrazo) { TarefaResponseDTO tarefa = service.reabrir(id, novoPrazo); return ResponseEntity.ok(tarefa); } @PatchMapping("/tarefa/{id}/reatribuir") + @Override public ResponseEntity reatribuir(@PathVariable @Positive Long id, @RequestParam Long idResponsavel) { TarefaResponseDTO tarefa = service.reatribuir(id, idResponsavel); return ResponseEntity.ok(tarefa); } @DeleteMapping("/tarefa/{id}") + @Override public ResponseEntity excluir(@PathVariable @Positive Long id) { service.excluir(id); return ResponseEntity.noContent().build(); diff --git a/src/main/java/br/com/acta/controller/TarefaDependenteController.java b/src/main/java/br/com/acta/controller/TarefaDependenteController.java index fbc6712..00e70c0 100644 --- a/src/main/java/br/com/acta/controller/TarefaDependenteController.java +++ b/src/main/java/br/com/acta/controller/TarefaDependenteController.java @@ -1,5 +1,6 @@ package br.com.acta.controller; +import br.com.acta.common.config.swagger.openapi.TarefaDependenteOpenapi; import br.com.acta.dto.pdca.tarefa.TarefaResponseDTO; import br.com.acta.dto.pdca.tarefa.TarefaSummaryResponseDTO; import br.com.acta.service.TarefaService; @@ -16,22 +17,25 @@ @RestController @RequestMapping(value = "api/v1/tarefa/{id}/dependencia", produces = MediaType.APPLICATION_JSON_VALUE) @RequiredArgsConstructor -public class TarefaDependenteController { +public class TarefaDependenteController implements TarefaDependenteOpenapi { private final TarefaService service; @GetMapping + @Override public ResponseEntity> buscar(@PathVariable @Positive Long id) { List dependentes = service.buscarDependentes(id); return ResponseEntity.ok(dependentes); } @PostMapping("/{idDependente}") + @Override public ResponseEntity adicionar(@PathVariable @Positive Long id, @PathVariable @Positive Long idDependente){ TarefaResponseDTO tarefa = service.adicionarDependencia(id, idDependente); return ResponseEntity.status(201).body(tarefa); } @DeleteMapping("/{idDependente}") + @Override public ResponseEntity remover(@PathVariable @Positive Long id, @PathVariable @Positive Long idDependente){ service.removerDependencia(id, idDependente); return ResponseEntity.noContent().build(); diff --git a/src/main/java/br/com/acta/controller/TreinamentoController.java b/src/main/java/br/com/acta/controller/TreinamentoController.java index 524687e..091e853 100644 --- a/src/main/java/br/com/acta/controller/TreinamentoController.java +++ b/src/main/java/br/com/acta/controller/TreinamentoController.java @@ -1,5 +1,6 @@ package br.com.acta.controller; +import br.com.acta.common.config.swagger.openapi.TreinamentoOpenapi; import br.com.acta.dto.pdca.treinamento.TreinamentoRequestDTO; import br.com.acta.dto.pdca.treinamento.TreinamentoResponseDTO; import br.com.acta.service.TreinamentoService; @@ -16,34 +17,39 @@ @RestController @RequestMapping(value = "api/v1", produces = MediaType.APPLICATION_JSON_VALUE) @RequiredArgsConstructor -public class TreinamentoController { +public class TreinamentoController implements TreinamentoOpenapi { private final TreinamentoService service; @GetMapping("/ciclo/{idCiclo}/treinamento") + @Override public ResponseEntity> buscarTreinamentos(@PathVariable @Positive Long idCiclo) { List treinamentos = service.buscarTreinamentos(idCiclo); return ResponseEntity.ok(treinamentos); } @GetMapping("/treinamento/{id}") + @Override public ResponseEntity buscar(@PathVariable @Positive Long id){ TreinamentoResponseDTO treinamento = service.buscar(id); return ResponseEntity.ok(treinamento); } @PostMapping("/ciclo/{idCiclo}/treinamento") + @Override public ResponseEntity inserir(@PathVariable @Positive Long idCiclo, @RequestBody @Valid TreinamentoRequestDTO dto) { TreinamentoResponseDTO treinamento = service.inserir(idCiclo, dto); return ResponseEntity.status(201).body(treinamento); } @PatchMapping("/treinamento/{id}") + @Override public ResponseEntity patch(@PathVariable @Positive Long id, @RequestBody Map campos) { TreinamentoResponseDTO treinamento = service.patch(id, campos); return ResponseEntity.ok(treinamento); } @DeleteMapping("/treinamento/{id}") + @Override public ResponseEntity excluir(@PathVariable @Positive Long id) { service.excluir(id); return ResponseEntity.noContent().build(); diff --git a/src/main/java/br/com/acta/controller/UsuarioCicloController.java b/src/main/java/br/com/acta/controller/UsuarioCicloController.java index 6bc7555..c381db9 100644 --- a/src/main/java/br/com/acta/controller/UsuarioCicloController.java +++ b/src/main/java/br/com/acta/controller/UsuarioCicloController.java @@ -1,5 +1,6 @@ package br.com.acta.controller; +import br.com.acta.common.config.swagger.openapi.UsuarioCicloOpenapi; import br.com.acta.dto.join.usuario_ciclo.UsuarioCicloRequestDTO; import br.com.acta.dto.join.usuario_ciclo.UsuarioCicloResponseDTO; import br.com.acta.entity.enums.PapelCiclo; @@ -18,34 +19,39 @@ @RestController @RequestMapping(value = "api/v1/ciclo/{idCiclo}/usuario", produces = MediaType.APPLICATION_JSON_VALUE) @RequiredArgsConstructor -public class UsuarioCicloController { +public class UsuarioCicloController implements UsuarioCicloOpenapi { private final UsuarioCicloService service; @GetMapping + @Override public ResponseEntity> buscar(@PathVariable @Positive Long idCiclo){ List usuario = service.buscarPorCiclo(idCiclo); return ResponseEntity.ok(usuario); } @PostMapping + @Override public ResponseEntity inserir(@PathVariable @Positive Long idCiclo, @RequestBody @Valid UsuarioCicloRequestDTO dto){ UsuarioCicloResponseDTO usuario = service.inserir(dto, idCiclo); return ResponseEntity.status(201).body(usuario); } @PatchMapping("/{idUsuario}") + @Override public ResponseEntity patch(@PathVariable @Positive Long idCiclo, @PathVariable @Positive Long idUsuario, @RequestParam PapelCiclo papelCiclo) { UsuarioCicloResponseDTO usuario = service.patch(idUsuario, idCiclo, papelCiclo); return ResponseEntity.ok(usuario); } @PatchMapping("/substituir-responsavel") + @Override public ResponseEntity> substituirResponsavel(@PathVariable @Positive Long idCiclo, @RequestParam @Positive Long idUsuarioAntigo, @RequestParam @Positive Long idUsuarioNovo) { List usuarios = service.substituirResponsavel(idCiclo, idUsuarioAntigo, idUsuarioNovo); return ResponseEntity.ok(usuarios); } @DeleteMapping("/{idUsuario}") + @Override public ResponseEntity excluir(@PathVariable @Positive Long idCiclo, @PathVariable @Positive Long idUsuario) { service.excluir(idUsuario, idCiclo); return ResponseEntity.noContent().build(); diff --git a/src/main/java/br/com/acta/controller/UsuarioController.java b/src/main/java/br/com/acta/controller/UsuarioController.java index 7e83a1b..bfd87fe 100644 --- a/src/main/java/br/com/acta/controller/UsuarioController.java +++ b/src/main/java/br/com/acta/controller/UsuarioController.java @@ -3,6 +3,7 @@ import java.util.List; import java.util.Map; +import br.com.acta.common.config.swagger.openapi.UsuarioOpenapi; import br.com.acta.dto.join.usuario_ciclo.UsuarioCicloResponseDTO; import br.com.acta.service.UsuarioCicloService; import org.springframework.http.MediaType; @@ -30,47 +31,54 @@ @RestController @RequestMapping(value = "api/v1/usuario", produces = MediaType.APPLICATION_JSON_VALUE) @RequiredArgsConstructor -public class UsuarioController { +public class UsuarioController implements UsuarioOpenapi { private final UsuarioService service; private final UsuarioCicloService usuarioCicloService; @GetMapping("/ciclos-usuario/{idUsuario}") + @Override public ResponseEntity> buscarCiclosUsuario(@PathVariable @Positive Long idUsuario) { List ciclos = usuarioCicloService.buscarPorUsuario(idUsuario); return ResponseEntity.ok(ciclos); } @GetMapping("/empresa/{idEmpresa}") + @Override public ResponseEntity> buscar(@PathVariable @Positive Long idEmpresa, @RequestParam(required = false) TipoUsuario tipo) { List usuarios = service.buscar(idEmpresa, tipo); return ResponseEntity.ok(usuarios); } @GetMapping("/{id}") + @Override public ResponseEntity buscarPorId(@PathVariable @Positive Long id){ UsuarioResponseDTO usuario = service.buscar(id); return ResponseEntity.ok(usuario); } @PostMapping + @Override public ResponseEntity inserir(@RequestBody @Valid UsuarioRequestDTO dto) { UsuarioResponseDTO usuario = service.inserir(dto); return ResponseEntity.status(201).body(usuario); } @PatchMapping("/{id}") + @Override public ResponseEntity patch(@PathVariable @Positive Long id, @RequestBody Map campos) { UsuarioResponseDTO usuario = service.patch(id, campos); return ResponseEntity.ok(usuario); } @DeleteMapping("/{id}/foto") + @Override public ResponseEntity excluirFoto(@PathVariable @Positive Long id) { UsuarioResponseDTO usuario = service.excluirFoto(id); return ResponseEntity.ok(usuario); } @DeleteMapping("/{id}") + @Override public ResponseEntity excluir(@PathVariable @Positive Long id) { service.excluir(id); return ResponseEntity.noContent().build(); diff --git a/src/main/java/br/com/acta/controller/UsuarioTreinamentoController.java b/src/main/java/br/com/acta/controller/UsuarioTreinamentoController.java index 5e07669..f0a367a 100644 --- a/src/main/java/br/com/acta/controller/UsuarioTreinamentoController.java +++ b/src/main/java/br/com/acta/controller/UsuarioTreinamentoController.java @@ -1,5 +1,6 @@ package br.com.acta.controller; +import br.com.acta.common.config.swagger.openapi.UsuarioTreinamentoOpenapi; import br.com.acta.dto.join.usuario_treinamento.UsuarioTreinamentoRequestDTO; import br.com.acta.dto.join.usuario_treinamento.UsuarioTreinamentoResponseDTO; import br.com.acta.entity.enums.StatusTreinamento; @@ -16,28 +17,32 @@ @RestController @RequestMapping(value = "api/v1/treinamento/{id}/usuario", produces = MediaType.APPLICATION_JSON_VALUE) @RequiredArgsConstructor -public class UsuarioTreinamentoController { +public class UsuarioTreinamentoController implements UsuarioTreinamentoOpenapi { private final UsuarioTreinamentoService service; @GetMapping + @Override public ResponseEntity> buscar(@PathVariable @Positive Long id) { List usuarios = service.buscar(id); return ResponseEntity.ok(usuarios); } @PostMapping + @Override public ResponseEntity inserir(@PathVariable @Positive Long id, @RequestBody @Valid UsuarioTreinamentoRequestDTO dto){ UsuarioTreinamentoResponseDTO usuario = service.inserir(id, dto); return ResponseEntity.status(201).body(usuario); } @PatchMapping("/{idUsuario}") + @Override public ResponseEntity patchStatus(@PathVariable @Positive Long id, @PathVariable @Positive Long idUsuario, @RequestParam StatusTreinamento status){ UsuarioTreinamentoResponseDTO usuario = service.patchStatus(id, idUsuario, status); return ResponseEntity.ok(usuario); } @DeleteMapping("/{idUsuario}") + @Override public ResponseEntity excluir(@PathVariable @Positive Long id, @PathVariable @Positive Long idUsuario){ service.excluir(id, idUsuario); return ResponseEntity.noContent().build(); diff --git a/src/main/java/br/com/acta/controller/VerificacaoResultadoController.java b/src/main/java/br/com/acta/controller/VerificacaoResultadoController.java index 39c3c6d..0d4394f 100644 --- a/src/main/java/br/com/acta/controller/VerificacaoResultadoController.java +++ b/src/main/java/br/com/acta/controller/VerificacaoResultadoController.java @@ -1,5 +1,6 @@ package br.com.acta.controller; +import br.com.acta.common.config.swagger.openapi.VerificacaoResultadoOpenapi; import br.com.acta.dto.pdca.verificacao_resultado.VerificacaoResultadoRequestDTO; import br.com.acta.dto.pdca.verificacao_resultado.VerificacaoResultadoResponseDTO; import br.com.acta.service.VerificacaoResultadoService; @@ -16,34 +17,39 @@ @RestController @RequestMapping(value = "api/v1", produces = MediaType.APPLICATION_JSON_VALUE) @RequiredArgsConstructor -public class VerificacaoResultadoController { +public class VerificacaoResultadoController implements VerificacaoResultadoOpenapi { private final VerificacaoResultadoService service; @GetMapping("/ciclos/{idCiclo}/verificacoes") + @Override public ResponseEntity< List> buscar(@PathVariable @Positive Long idCiclo) { List resultados = service.buscarVerificacoes(idCiclo); return ResponseEntity.ok(resultados); } @GetMapping("/verificacoes/{id}") + @Override public ResponseEntity buscarPorId(@PathVariable @Positive Long id) { VerificacaoResultadoResponseDTO resultado = service.buscar(id); return ResponseEntity.ok(resultado); } @PostMapping("/ciclos/{idCiclo}/verificacoes") + @Override public ResponseEntity inserir(@PathVariable @Positive Long idCiclo, @RequestParam @Positive Long idCriadoPor, @Valid @RequestBody VerificacaoResultadoRequestDTO dto){ VerificacaoResultadoResponseDTO resultado = service.inserir(idCiclo, dto, idCriadoPor); return ResponseEntity.status(201).body(resultado); } @PatchMapping("/verificacoes/{id}") + @Override public ResponseEntity patch(@PathVariable @Positive Long id, @RequestBody Map campos) { VerificacaoResultadoResponseDTO resultado = service.patch(id, campos); return ResponseEntity.ok(resultado); } @DeleteMapping("/verificacoes/{id}") + @Override public ResponseEntity excluir(@PathVariable @Positive Long id) { service.excluir(id); return ResponseEntity.noContent().build(); diff --git a/src/main/java/br/com/acta/controller/contato/EmailController.java b/src/main/java/br/com/acta/controller/contato/EmailController.java index ac588f6..f705383 100644 --- a/src/main/java/br/com/acta/controller/contato/EmailController.java +++ b/src/main/java/br/com/acta/controller/contato/EmailController.java @@ -1,5 +1,6 @@ package br.com.acta.controller.contato; +import br.com.acta.common.config.swagger.openapi.EmailOpenapi; import br.com.acta.dto.core.contato.email.EmailRequestDTO; import br.com.acta.dto.core.contato.email.EmailResponseDTO; import br.com.acta.service.EmailService; @@ -17,40 +18,46 @@ @RestController @RequestMapping(value = "/api/v1", produces = MediaType.APPLICATION_JSON_VALUE) @RequiredArgsConstructor -public class EmailController { +public class EmailController implements EmailOpenapi { private final EmailService service; @GetMapping("/empresa/{idEmpresa}/email") + @Override public ResponseEntity> buscarEmailEmpresa(@PathVariable @Positive Long idEmpresa) { List emails = service.buscarEmailsEmpresa(idEmpresa); return ResponseEntity.ok(emails); } @PostMapping("/empresa/{idEmpresa}/email/") + @Override public ResponseEntity inserirEmailEmpresa(@PathVariable @Positive Long idEmpresa, @RequestBody @Valid EmailRequestDTO dto) { EmailResponseDTO email = service.inserirEmailEmpresa(idEmpresa, dto); return ResponseEntity.status(201).body(email); } @DeleteMapping("/empresa/{idEmpresa}/email/{idEmail}") + @Override public ResponseEntity excluirEmailEmpresa(@PathVariable @Positive Long idEmpresa, @PathVariable @Positive Long idEmail) { service.excluirEmailEmpresa(idEmpresa, idEmail); return ResponseEntity.noContent().build(); } @GetMapping("/colaborador/{idColaborador}/email") + @Override public ResponseEntity> buscarEmailColaborador(@PathVariable @Positive Long idColaborador) { List emails = service.buscarEmailsColaborador(idColaborador); return ResponseEntity.ok(emails); } @PostMapping("/colaborador/{idColaborador}/email/") + @Override public ResponseEntity inserirEmailColaborador(@PathVariable @Positive Long idColaborador, @RequestBody @Valid EmailRequestDTO dto) { EmailResponseDTO email = service.inserirEmailColaborador(idColaborador, dto); return ResponseEntity.status(201).body(email); } @DeleteMapping("/colaborador/{idColaborador}/email/{idEmail}") + @Override public ResponseEntity excluirEmailColaborador(@PathVariable @Positive Long idColaborador, @PathVariable @Positive Long idEmail) { service.excluirEmailColaborador(idColaborador, idEmail); return ResponseEntity.noContent().build(); diff --git a/src/main/java/br/com/acta/controller/contato/TelefoneController.java b/src/main/java/br/com/acta/controller/contato/TelefoneController.java index bd6b38b..1b64390 100644 --- a/src/main/java/br/com/acta/controller/contato/TelefoneController.java +++ b/src/main/java/br/com/acta/controller/contato/TelefoneController.java @@ -1,5 +1,6 @@ package br.com.acta.controller.contato; +import br.com.acta.common.config.swagger.openapi.TelefoneOpenapi; import br.com.acta.dto.core.contato.telefone.TelefoneRequestDTO; import br.com.acta.dto.core.contato.telefone.TelefoneResponseDTO; import br.com.acta.service.TelefoneService; @@ -17,40 +18,46 @@ @RestController @RequiredArgsConstructor @RequestMapping(value = "/api/v1", produces = MediaType.APPLICATION_JSON_VALUE) -public class TelefoneController { +public class TelefoneController implements TelefoneOpenapi { private final TelefoneService service; @GetMapping("/empresa/{idEmpresa}/telefone") + @Override public ResponseEntity> buscarTelefoneEmpresa(@PathVariable @Positive Long idEmpresa) { List telefones = service.buscarTelefonesEmpresa(idEmpresa); return ResponseEntity.ok(telefones); } @PostMapping("/empresa/{idEmpresa}/telefone/") + @Override public ResponseEntity inserirTelefoneEmpresa(@PathVariable @Positive Long idEmpresa, @RequestBody @Valid TelefoneRequestDTO dto) { TelefoneResponseDTO telefone = service.inserirTelefoneEmpresa(idEmpresa, dto); return ResponseEntity.status(201).body(telefone); } @DeleteMapping("/empresa/{idEmpresa}/telefone/{idTelefone}") + @Override public ResponseEntity excluirTelefoneEmpresa(@PathVariable @Positive Long idEmpresa, @PathVariable @Positive Long idTelefone) { service.excluirTelefoneEmpresa(idEmpresa, idTelefone); return ResponseEntity.noContent().build(); } @GetMapping("/colaborador/{idColaborador}/telefone") + @Override public ResponseEntity> buscarTelefoneColaborador(@PathVariable @Positive Long idColaborador) { List telefones = service.buscarTelefonesColaborador(idColaborador); return ResponseEntity.ok(telefones); } @PostMapping("/colaborador/{idColaborador}/telefone/") + @Override public ResponseEntity inserirTelefoneColaborador(@PathVariable @Positive Long idColaborador, @RequestBody @Valid TelefoneRequestDTO dto) { TelefoneResponseDTO telefone = service.inserirTelefoneColaborador(idColaborador, dto); return ResponseEntity.status(201).body(telefone); } @DeleteMapping("/colaborador/{idColaborador}/telefone/{idTelefone}") + @Override public ResponseEntity excluirTelefoneColaborador(@PathVariable @Positive Long idColaborador, @PathVariable @Positive Long idTelefone) { service.excluirTelefoneColaborador(idColaborador, idTelefone); return ResponseEntity.noContent().build(); diff --git a/src/main/java/br/com/acta/service/TarefaService.java b/src/main/java/br/com/acta/service/TarefaService.java index 40f61d1..aa60dc6 100644 --- a/src/main/java/br/com/acta/service/TarefaService.java +++ b/src/main/java/br/com/acta/service/TarefaService.java @@ -84,7 +84,7 @@ public TarefaResponseDTO inserir(Long idPlanoAcao, TarefaRequestDTO dto) { Tarefa tarefa = mapper.toEntity(dto); PlanoAcao planoAcao = planoAcaoService.getEntity(idPlanoAcao); Usuario usuario = usuarioService.getEntity(dto.idResponsavel()); - Validador.validarCicloAberto(planoAcao.getCiclo()); + Validador.validarMesmoCiclo(planoAcao.getCiclo(), usuario.getCiclos()); if (!Set.of(StatusPlanoAcao.APROVADO, StatusPlanoAcao.EM_EXECUCAO).contains(planoAcao.getStatus())){ throw new InvalidResourceStatusException("Plano de Ação", List.of(StatusPlanoAcao.APROVADO.toString(), StatusPlanoAcao.EM_EXECUCAO.toString())); @@ -252,4 +252,4 @@ private boolean criaDependenciaCircular(Tarefa tarefa, Tarefa dependente) { return false; } -} +} \ No newline at end of file diff --git a/src/main/java/br/com/acta/service/VerificacaoResultadoService.java b/src/main/java/br/com/acta/service/VerificacaoResultadoService.java index da8ac17..ebbed47 100644 --- a/src/main/java/br/com/acta/service/VerificacaoResultadoService.java +++ b/src/main/java/br/com/acta/service/VerificacaoResultadoService.java @@ -74,7 +74,7 @@ public VerificacaoResultadoResponseDTO inserir(Long idCiclo, VerificacaoResultad configurarUsuarioAtual(); Ciclo ciclo = cicloService.getEntity(idCiclo); Usuario usuario = usuarioService.getEntity(idCriadoPor); - Validador.validarCicloAberto(ciclo); + Validador.validarMesmoCiclo(ciclo, usuario.getCiclos()); if (ciclo.getStatus() != StatusCiclo.VERIFICACAO) { throw new InvalidResourceStatusException("inserir", "Verificação de Resultado", StatusCiclo.VERIFICACAO.toString(), "Ciclo"); @@ -113,4 +113,4 @@ public VerificacaoResultado getEntity(Long id) { return repo.findByIdAndCicloEmpresaId(id, atual().idEmpresa()) .orElseThrow(() -> new ModelNotFoundException("Verificação de Resultado", id)); } -} +} \ No newline at end of file