Pular para conteúdo

US2.7

Candidatura em Vaga de Voluntariado (RF10)

História de Usuário

Como estudante, quero me candidatar a uma vaga de voluntariado ativa para participar das atividades da organização.


Rastreabilidade

Item Código / Referência
User Story US2.7
Requisito Funcional RF10 — Realizar candidatura
Característica de Produto CP02 — Ciclo de Vagas e Engajamento
Requisitos Não-Funcionais RNF04 (responsivo iOS/Android), RNF06 (suporte a 1.000 usuários simultâneos)
Release Planejada R2 — Perfis e Conexão

Descrição

Implementar o fluxo de candidatura de um estudante a uma vaga de voluntariado com inscrições abertas. O estudante, a partir da tela de detalhes da vaga (RF09), deve poder se candidatar com um clique, gerando um registro de candidatura no estado inicial de aguardando avaliação. O sistema deve impedir candidaturas duplicadas e notificar a organização sobre a nova inscrição. Esta funcionalidade é o ato central da plataforma — conecta os dois lados do serviço (estudante e organização). O escopo é full-stack.


Critérios de Aceite (BDD / Gherkin)

Cenário 1: Candidatura com sucesso

Dado que o estudante está autenticado, visualiza os detalhes de uma vaga com inscrições abertas e nunca se candidatou a ela
Quando clica no botão "Candidatar-se" e confirma a ação
Então o sistema registra a candidatura como aguardando avaliação, exibe mensagem "Candidatura realizada com sucesso" e atualiza o botão para "Candidatura enviada"

Cenário 2: Candidatura duplicada

Dado que o estudante já se candidatou à vaga "Apoio em Eventos" e sua candidatura ainda não foi avaliada
Quando tenta se candidatar novamente à mesma vaga
Então o sistema bloqueia a ação e exibe a mensagem "Você já se candidatou a esta vaga"

Cenário 3: Estudante não autenticado

Dado que um visitante não autenticado tenta se candidatar a uma vaga
Quando envia os dados de candidatura sem estar logado na plataforma
Então o sistema recusa a operação e solicita que o usuário faça login

Cenário 4: Vaga com inscrições encerradas

Dado que uma vaga não está mais aceitando inscrições
Quando o estudante tenta se candidatar
Então o sistema recusa a operação e exibe a mensagem "Esta vaga não está mais aceitando candidaturas"

Cenário 5: Confirmação de candidatura no perfil do estudante

Dado que o estudante realizou uma candidatura com sucesso
Quando acessa seu painel de candidaturas
Então o sistema exibe a vaga na lista de "Minhas Candidaturas" com a indicação de que está aguardando avaliação e a data em que a candidatura foi realizada


Regras de Negócio

  • Somente estudantes cadastrados e autenticados na plataforma podem se candidatar a vagas de voluntariado.
  • Um mesmo estudante não pode se candidatar mais de uma vez à mesma vaga.
  • A candidatura somente é permitida para vagas que estejam com inscrições abertas.
  • Ao se candidatar, o registro da inscrição entra no estado inicial de aguardando avaliação pela organização.
  • A data e o horário exatos da candidatura devem ser registrados para fins de histórico e ordenação das avaliações.

Requisitos Técnicos

  • Backend: Django + DRF. Criar modelo Application no app applications com campos: student (FK → StudentProfile), opportunity (FK → Opportunity), status (choices: pending/approved/rejected/cancelled), created_at, updated_at.
  • Endpoint: POST /api/v1/applications/ — criar candidatura. GET /api/v1/applications/ — listar candidaturas do estudante autenticado.
  • Constraint: unique_together = ('student', 'opportunity') para impedir duplicidade.
  • Frontend: React Native + Expo + NativeWind. Botão de candidatura na tela de detalhes da vaga, modal de confirmação, feedback visual de sucesso/erro.
  • Segurança: Validar que o estudante autenticado corresponde ao autor da candidatura. Utilizar permission_classes = [IsAuthenticated].
  • Responsividade: Layout adaptável a iOS e Android (RNF04).
  • Testes: pytest com factory_boy para testar criação de candidatura, bloqueio de duplicidade, validação de status da vaga e permissões.

Referências de Design

Protótipo Figma: - https://www.figma.com/design/f6bQuVohTvZLF5WWPEbNob/Liaison?node-id=659-2&t=Bn4zGHNjZFTDPrK5-0 - https://www.figma.com/design/f6bQuVohTvZLF5WWPEbNob/Liaison?node-id=658-2&t=Bn4zGHNjZFTDPrK5-0 - https://www.figma.com/design/f6bQuVohTvZLF5WWPEbNob/Liaison?node-id=660-2&t=Bn4zGHNjZFTDPrK5-0 - https://www.figma.com/design/f6bQuVohTvZLF5WWPEbNob/Liaison?node-id=663-2&t=Bn4zGHNjZFTDPrK5-0


Dependências

  • Relacionada a: #12 (Cadastro de Estudante — RF01/US1.1), #21 (Visualização de Detalhes da Vaga — RF09/US2.6)
  • Bloqueada por: #12 (RF01 — Cadastrar estudante), US2.3/#nova (RF20 — Publicar oportunidade)
  • Bloqueia: #24 (Avaliação de Candidaturas — RF11/US2.8), #23 (Cancelamento de Candidatura — RF12/US2.9)

Notas

  • ICE Score: I=10 C=7 E=5 = 350 | MoSCoW: Must | Quadrante: Quick Win
  • RF10 é o ato central do serviço de intermediação de voluntariado. Sofre penalidade de facilidade por depender de RF01 (cadastro de estudante) e RF20 (publicação de vaga) — itens que precisam estar concluídos antes que esta funcionalidade possa ser integrada e testada por completo.
  • Considerar adicionar um campo de mensagem opcional na candidatura para o estudante enviar um texto de apresentação à organização (não previsto no requisito funcional original, mas recorrente em plataformas de voluntariado).
  • A notificação à organização sobre nova candidatura será tratada na issue US2.10 (RF12 — Notificações).

Definição de Preparado (DoR)

Item de Verificação (Universal) Evidência / Rastreabilidade Situação
A história está bem descrita e com critérios de aceite? Documentada e alinhada com o escopo do MVP. ✔ Sim
Possui protótipos de interface necessários? Interface mapeada e disponível no Figma da equipe. ✔ Sim
A história é independente o suficiente para ser entregue? Cadeia de dependências resolvida (vide Matriz MVP). ✔ Sim
Foi estimada pela equipe? Estimada utilizando o método ICE Score. ✔ Sim

Definição de Pronto (DoD)

Pergunta Fundamental (Universal) Evidência de Implementação Status
O código foi implementado e revisado? Pull Request aprovado e fundido na branch principal. ✔ Sim
Coerente com o protótipo validado? O layout segue os componentes e tokens de design. ✔ Sim
Passou nos testes necessários? Testes (unitários/integração) executados e aprovados. ✔ Sim
A documentação está atualizada? Atualizada no repositório de requisitos. ✔ Sim

Critérios de Aceitação (CA)

  • Candidatura com sucesso: O estudante autenticado, ao clicar em "Candidatar-se" e confirmar, tem sua candidatura registrada como aguardando avaliação. O botão muda para "Candidatura enviada" e o estudante vê a mensagem de sucesso.
  • Candidatura duplicada: Se o estudante já se candidatou à mesma vaga, o sistema exibe "Você já se candidatou a esta vaga" e bloqueia nova candidatura.
  • Usuário não logado: Quem não está logado não consegue se candidatar — o sistema solicita login.
  • Vaga com inscrições encerradas: Se a vaga não estiver mais aceitando candidaturas, o sistema recusa e informa o estudante.
  • Confirmação no painel: Após se candidatar, o estudante vê a vaga na tela "Minhas Candidaturas" com o status aguardando avaliação e a data da candidatura.

Acesso & Evidência

  • Código Homologado: Repositório Principal
  • Status de Conclusão: 100% Entregue (conforme Matriz de Completude).