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
Applicationno appapplicationscom 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).