Refinamento Arquitetural - Sprint 3
Visão Geral da Arquitetura
A Sprint 3 concentra-se na implementação dos fluxos centrais do sistema: a Solicitação de Feedback por parte dos colaboradores e a Resposta de Feedback pelos avaliadores externos. Esta fase é crucial para materializar o core business da aplicação, envolvendo a criação e orquestração de funcionalidades nos microserviços de FeedbackRequestService e FeedbackResponseService, além de interações significativas com o Frontend, API Gateway, e o serviço de notificações por e-mail.
A arquitetura continuará seguindo os princípios de microserviços, Domain-Driven Design (DDD), e comunicação via API RESTful, garantindo escalabilidade, manutenibilidade e clareza nas responsabilidades de cada componente.
Componentes Arquiteturais Chave para Sprint 3
Durante a Sprint 3, os seguintes componentes serão desenvolvidos ou terão suas funcionalidades expandidas:
1. Microserviço de Solicitação de Feedback (FeedbackRequestService - Java/Spring Boot)
Responsável por todo o ciclo de vida da solicitação de feedback:
- Criação e Edição de Solicitações: Permitir que colaboradores criem e editem rascunhos de solicitações, adicionando perguntas personalizadas e indicando avaliadores externos.
- Gestão de Status: Controlar os status da solicitação ("em criação", "pendente aprovação", "aguardando respostas", "finalizado", "rejeitado").
- Submissão para Aprovação: Enviar a solicitação para o PDM correspondente.
- Processo de Aprovação/Rejeição: Permitir que PDMs aprovem ou rejeitem solicitações, com justificativa para rejeição.
- Geração de Hash para Formulários: Criar um identificador único (hash) para cada formulário, a ser usado nos links enviados aos avaliadores.
- Validações de Negócio:
- Mínimo de 3 perguntas personalizadas.
- Mínimo de 2 e máximo de 9 avaliadores.
- E-mail de avaliador não pode ser do domínio
@ciandt.com.br. - Colaborador só pode criar novo formulário 6 meses após finalização do último.
- Notificações: Enviar e-mails para PDMs (nova solicitação), colaboradores (status da solicitação) e avaliadores (convite para feedback).
2. Microserviço de Resposta de Feedback (FeedbackResponseService - Java/Spring Boot)
Responsável por gerenciar o processo de resposta dos avaliadores externos:
- Autenticação do Avaliador:
- Validar e-mail do avaliador (não pode ser
@ciandt.com.br). - Gerar e enviar um código de acesso único por e-mail.
- Validar o código de acesso informado.
- Validar e-mail do avaliador (não pode ser
- Exibição do Formulário: Apresentar o formulário de feedback (perguntas) com base no hash da solicitação.
- Validação de Prazo: Verificar se o formulário está dentro do período de 3 meses para resposta (a partir da data de aprovação do PDM).
- Coleta e Armazenamento de Respostas:
- Permitir que o avaliador responda às perguntas ou indique "não sabe avaliar".
- Salvar respostas como rascunho.
- Finalizar e submeter a avaliação.
- Notificações: Informar o colaborador quando um feedback for finalizado (se for o último avaliador).
- Atualização de Status: Sinalizar ao
FeedbackRequestServicequando uma resposta é submetida para que o status geral da solicitação possa ser atualizado.
3. Frontend (Next.js) - Papéis e Interações
Interfaces de usuário específicas serão desenvolvidas para:
- Colaborador:
- Listar suas solicitações de feedback (com status e ações).
- Criar novo formulário de solicitação (adicionar perguntas, avaliadores).
- Editar formulários em rascunho ou rejeitados.
- Excluir solicitações (conforme regras de status).
- Visualizar o status da aprovação e das respostas.
- PDM (People Development Manager):
- Listar solicitações pendentes de sua aprovação.
- Analisar detalhes da solicitação (perguntas, avaliadores).
- Aprovar ou rejeitar solicitações, adicionando comentários se rejeitar.
- Avaliador Externo:
- Página de "login" para inserir e-mail e receber código de acesso.
- Página para inserir código de acesso.
- Formulário de feedback para responder às perguntas.
- Opções para salvar rascunho ou finalizar avaliação.
4. Serviço de E-mail
Um componente crucial para as notificações. Pode ser um serviço interno dedicado ou a integração com um provedor de e-mail externo. Será utilizado para:
- Enviar código de acesso para avaliadores.
- Notificar PDMs sobre novas solicitações de feedback.
- Notificar colaboradores sobre o status de suas solicitações (aprovada, rejeitada, respondida).
- Enviar convites com o link (contendo o hash) do formulário para os avaliadores.
Diagrama de Componentes da Sprint 3
Decisões Arquiteturais da Sprint 3
-
Autenticação de Avaliador Externo via Código de Acesso por E-mail:
- Decisão: Avaliadores externos se autenticam fornecendo seu e-mail (previamente cadastrado na solicitação) e um código de acesso único enviado para esse e-mail.
- Justificativa: Mecanismo simples e de baixo atrito para o avaliador, que não precisa criar uma conta formal. Garante que apenas o dono do e-mail convidado possa responder. Evita que colaboradores internos (
@ciandt.com.br) respondam, pois o sistema já valida o domínio no cadastro e pode reforçar no login. - Implicações: Forte dependência do serviço de e-mail para o fluxo de resposta. Necessidade de gerenciar a geração, envio, validade e unicidade dos códigos de acesso.
-
Hashing de ID de Formulário para Links Externos:
- Decisão: O identificador da solicitação de feedback usado nos links enviados aos avaliadores será um hash não sequencial e difícil de adivinhar, em vez de um ID numérico direto.
- Justificativa: Aumenta a segurança por obscuridade, dificultando que terceiros tentem adivinhar URLs de formulários válidos.
- Implicações: O
FeedbackRequestServicedeve gerar e armazenar este hash. OFeedbackResponseService(e o Frontend) utilizarão este hash para buscar e identificar os formulários.
-
Validação de Prazo de Resposta (3 meses):
- Decisão: As respostas de feedback só serão aceitas se submetidas dentro de um período de 3 meses a contar da data de aprovação da solicitação pelo PDM.
- Justificativa: Garante que o feedback coletado seja temporalmente relevante para o desenvolvimento do colaborador.
- Implicações: O
FeedbackResponseServiceprecisa consultar a data de aprovação da solicitação (provavelmente viaFeedbackRequestServiceou diretamente do banco de dados compartilhado/replicado) e compará-la com a data atual antes de permitir a resposta.
-
Notificações por E-mail para Eventos Chave:
- Decisão: Utilizar e-mails para notificar os usuários (colaboradores, PDMs, avaliadores) sobre eventos importantes no ciclo de vida do feedback.
- Justificativa: Mantém os usuários informados e engajados no processo. É um meio de comunicação padrão e esperado para tais interações.
- Implicações: Necessidade de um serviço de e-mail confiável e resiliente. As operações de envio de e-mail devem ser, preferencialmente, assíncronas para não bloquear os fluxos principais da aplicação.
-
Separação Funcional entre
FeedbackRequestServiceeFeedbackResponseService:- Decisão: Manter as lógicas de negócio para a criação/gerenciamento de solicitações e para o processo de resposta em microserviços distintos.
- Justificativa: Alinhamento com os Bounded Contexts do DDD (Solicitação de Feedback e Resposta de Feedback). Permite desenvolvimento, deploy e escalabilidade independentes para cada contexto.
- Implicações: Necessidade de comunicação inter-serviços (e.g.,
FeedbackResponseServicepode precisar consultarFeedbackRequestServicepara obter detalhes do formulário ou para notificar sobre uma resposta finalizada). Essa comunicação deve ser projetada para ser resiliente.
Padrões Arquiteturais Aplicados
- Domain-Driven Design (DDD):
- Agregados:
SolicitacaoFeedback(englobando Perguntas, Avaliadores Convidados, status, hashId) eRespostaFeedback(englobando as respostas individuais às perguntas de uma solicitação por um avaliador). - Serviços de Domínio: Lógica de aprovação/rejeição, geração de código de acesso, validação de prazo, orquestração de notificações.
- Bounded Contexts: Claramente delineados para
FeedbackRequesteFeedbackResponse, cada um com seu microserviço.
- Agregados:
- API Gateway: Ponto único de entrada para o frontend, lidando com roteamento, autenticação inicial e agregação leve, se necessário.
- Microservices: Decomposição da aplicação em serviços menores, coesos e independentes.
- Arquitetura em Camadas (dentro de cada microserviço):
- Apresentação (Controllers): Endpoints REST.
- Aplicação (Services): Orquestração dos casos de uso.
- Domínio (Entities, Value Objects, Domain Services): Regras de negócio e estado.
- Infraestrutura (Repositories, Email Clients): Persistência, comunicação externa.
Considerações de Segurança
- Proteção de Endpoints de Resposta e Autenticação do Avaliador:
- Acesso aos formulários de resposta apenas via link com hash único.
- Autenticação de dois fatores implícita para o avaliador (e-mail + código de acesso enviado ao e-mail).
- Códigos de acesso devem ser de uso único e ter tempo de expiração curto.
- Validação de Dados de Entrada:
- Validação rigorosa de todos os dados recebidos via API (e.g., formato de e-mail, número de perguntas/avaliadores, conteúdo das respostas).
- Impedir e-mails de domínio
@ciandt.com.brpara avaliadores externos.
- Autorização nos Fluxos de Solicitação e Aprovação:
- Colaboradores só podem gerenciar (criar, editar, excluir) suas próprias solicitações.
- PDMs só podem analisar e aprovar/rejeitar solicitações de colaboradores sob sua gestão.
- O
UserServiceserá consultado para verificar papéis e hierarquias.
- Anonimato da Resposta: Conforme especificado nos épicos, o sistema deve garantir que, embora o colaborador indique os avaliadores, as respostas individuais não sejam diretamente atribuíveis a um avaliador específico na visualização do colaborador (a menos que o modelo de visualização permita). O processo de resposta em si é autenticado para garantir que apenas o avaliador convidado responda.
- Proteção contra Abuso: Considerar rate limiting para envio de códigos de acesso e submissão de formulários para mitigar riscos de abuso.