diff --git a/src/main/java/br/com/acta/common/config/swagger/openapi/OnboardingOpenapi.java b/src/main/java/br/com/acta/common/config/swagger/openapi/OnboardingOpenapi.java index 2917d53..8d0e522 100644 --- a/src/main/java/br/com/acta/common/config/swagger/openapi/OnboardingOpenapi.java +++ b/src/main/java/br/com/acta/common/config/swagger/openapi/OnboardingOpenapi.java @@ -19,7 +19,7 @@ @Tag(name = "Onboarding", description = "Fluxo de entrada de administradores e criação de empresas") public interface OnboardingOpenapi { @Operation(summary = "Verifica a empresa e inicia o onboarding do gestor") - @ApiResponse(responseCode = "200", description = "Empresa identificada ou próxima etapa liberada", content = @Content(schema = @Schema(implementation = OnboardingResponseDTO.class))) + @ApiResponse(responseCode = "200", description = "Empresa identificada, orientação para solicitar convite a um ADMIN ativo ou próxima etapa liberada", content = @Content(schema = @Schema(implementation = OnboardingResponseDTO.class))) @ApiAuthenticationResponses @ApiBadRequestResponse @ApiConflictResponse @@ -32,4 +32,4 @@ public interface OnboardingOpenapi { @ApiConflictResponse ResponseEntity cadastrarEmpresa(@Parameter(hidden = true) FirebaseIdentity identity, @RequestBody(description = "Dados do gestor, empresa e endereço principal", required = true, content = @Content(schema = @Schema(implementation = OnboardingRequestDTO.class))) OnboardingRequestDTO dto); -} \ No newline at end of file +} diff --git a/src/main/java/br/com/acta/dto/core/empresa/OnboardingMapper.java b/src/main/java/br/com/acta/dto/core/empresa/OnboardingMapper.java index cf9b9df..2cec2e2 100644 --- a/src/main/java/br/com/acta/dto/core/empresa/OnboardingMapper.java +++ b/src/main/java/br/com/acta/dto/core/empresa/OnboardingMapper.java @@ -27,10 +27,11 @@ default OnboardingResponseDTO toResponse(Usuario usuario, boolean empresaExisten dados.statusEmpresa(), dados.idUsuario(), dados.tipoUsuario(), - dados.statusUsuario()); + dados.statusUsuario(), + null); } default OnboardingResponseDTO solicitarDadosEmpresa() { - return new OnboardingResponseDTO(false, false, true, null, null, null, null, null); + return new OnboardingResponseDTO(false, false, true, null, null, null, null, null, null); } -} \ No newline at end of file +} diff --git a/src/main/java/br/com/acta/dto/core/empresa/OnboardingResponseDTO.java b/src/main/java/br/com/acta/dto/core/empresa/OnboardingResponseDTO.java index bee2d60..5717a74 100644 --- a/src/main/java/br/com/acta/dto/core/empresa/OnboardingResponseDTO.java +++ b/src/main/java/br/com/acta/dto/core/empresa/OnboardingResponseDTO.java @@ -11,6 +11,7 @@ public record OnboardingResponseDTO( StatusGeral statusEmpresa, Long idUsuario, TipoUsuario tipoUsuario, - StatusGeral statusUsuario + StatusGeral statusUsuario, + String mensagem ) { -} \ No newline at end of file +} diff --git a/src/main/java/br/com/acta/service/OnboardingService.java b/src/main/java/br/com/acta/service/OnboardingService.java index 77415a2..3d07187 100644 --- a/src/main/java/br/com/acta/service/OnboardingService.java +++ b/src/main/java/br/com/acta/service/OnboardingService.java @@ -1,12 +1,9 @@ package br.com.acta.service; -import br.com.acta.common.client.BrevoClient; import br.com.acta.common.config.firebase.FirebaseAuthFilter.FirebaseIdentity; -import br.com.acta.common.handler.exception.BusinessRuleException; import br.com.acta.common.handler.exception.FirebaseAccessRevokedException; import br.com.acta.common.handler.exception.RegexException; import br.com.acta.common.handler.exception.UniqueViolationException; -import br.com.acta.common.utils.TokenUtils; import br.com.acta.dto.core.colaborador.ColaboradorMapper; import br.com.acta.dto.core.colaborador.ColaboradorRequestDTO; import br.com.acta.dto.core.contato.email.EmailRequestDTO; @@ -21,13 +18,11 @@ import br.com.acta.dto.core.usuario.UsuarioMapper; import br.com.acta.dto.core.usuario.UsuarioRequestDTO; import br.com.acta.entity.core.Colaborador; -import br.com.acta.entity.core.Convite; import br.com.acta.entity.core.Empresa; import br.com.acta.entity.core.Usuario; import br.com.acta.entity.enums.StatusGeral; import br.com.acta.entity.enums.TipoUsuario; import br.com.acta.repository.padrao.ColaboradorRepository; -import br.com.acta.repository.padrao.ConviteRepository; import br.com.acta.repository.padrao.EmpresaRepository; import br.com.acta.repository.padrao.UsuarioRepository; import br.com.caelum.stella.validation.CNPJValidator; @@ -38,23 +33,18 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.time.OffsetDateTime; import java.util.List; @Service @RequiredArgsConstructor public class OnboardingService { - private static final int VALIDADE_CONVITE_MINUTOS = 30; - private final EmpresaRepository empresaRepo; private final UsuarioRepository usuarioRepo; private final ColaboradorRepository colaboradorRepo; - private final ConviteRepository conviteRepo; private final EmpresaMapper empresaMapper; private final ColaboradorMapper colaboradorMapper; private final UsuarioMapper usuarioMapper; private final OnboardingMapper onboardingMapper; - private final BrevoClient brevoClient; private final CNPJValidator cnpjValidator = new CNPJValidator(); @PersistenceContext @@ -74,34 +64,8 @@ public OnboardingResponseDTO iniciar(FirebaseIdentity identity, OnboardingInicio Empresa empresa = empresaRepo.findByCnpj(dto.cnpj()).orElse(null); if (empresa == null) return onboardingMapper.solicitarDadosEmpresa(); - // Empresas pendentes não têm administrador ativo para um convite - if (empresa.getStatus() == StatusGeral.PENDENTE) { - return new OnboardingResponseDTO(true, false, false, empresa.getId(), empresa.getStatus(), null, null, null); - } - - Usuario criadoPor = usuarioRepo.findByTipoAndStatusAndEmpresaId(TipoUsuario.ADMIN, StatusGeral.ATIVO, empresa.getId()) - .stream() - .findFirst() - .orElseThrow(() -> new BusinessRuleException("A empresa não possui um administrador ativo")); - - Usuario usuario = criarUsuario(dto.gestor(), identity.email(), empresa, null, StatusGeral.PENDENTE); - Colaborador colaborador = criarColaborador(dto.gestor(), identity.email(), empresa, usuario, StatusGeral.PENDENTE); - usuario.setColaborador(colaborador); - - String codigo = TokenUtils.gerarCodigo(); - Convite convite = new Convite(); - convite.setUsuario(usuario); - convite.setEmailDestino(usuario.getEmailLogin()); - convite.setTokenHash(TokenUtils.hashToken(codigo)); - convite.setStatus("PENDENTE"); - convite.setExpiraEm(OffsetDateTime.now().plusMinutes(VALIDADE_CONVITE_MINUTOS)); - convite.setCriadoPor(criadoPor); - Convite conviteSalvo = conviteRepo.save(convite); - - conviteRepo.flush(); - brevoClient.enviarConviteAdmin(conviteSalvo.getEmailDestino(), usuario.getNome(), empresa.getNome(), conviteSalvo.getExpiraEm(), codigo); - - return onboardingMapper.toResponse(usuario, true, true, false); + return new OnboardingResponseDTO(true, false, false, empresa.getId(), empresa.getStatus(), null, null, null, + "Esta empresa já possui cadastro. Peça a um ADMIN ativo da empresa para convidar você."); } @PreAuthorize("hasAuthority('ROLE_FIREBASE')") @@ -183,4 +147,4 @@ private Colaborador criarColaborador(OnboardingRequestDTO.Gestor gestor, String colaborador.setUsuario(usuario); return colaboradorRepo.save(colaborador); } -} \ No newline at end of file +}