# 5. Fluxos de Utilizador ## 5.1 User Stories | ID | Como... | Quero... | Para... | |---|---|---|---| | US-01 | Visitante | Ver animais disponíveis sem criar conta | Descobrir se há animais que me interessem antes de me registar | | US-02 | Visitante | Filtrar animais por distrito e espécie | Encontrar animais próximos de mim rapidamente | | US-03 | Visitante | Ver o perfil de um canil com horários | Saber quando posso visitar antes de reservar | | US-04 | Utilizador | Criar conta com os meus dados | Poder adoptar animais e fazer doações | | US-05 | Utilizador | Reservar um animal para adopção | Garantir o animal antes de me deslocar ao canil | | US-06 | Utilizador | Receber email de confirmação da reserva | Ter prova escrita e recordar a data marcada | | US-07 | Utilizador | Fazer uma doação monetária a um canil | Apoiar financeiramente um canil próximo de mim | | US-08 | Utilizador | Doar ração ou brinquedos | Contribuir com bens essenciais sem precisar de dinheiro | | US-09 | Utilizador | Escolher se entrego ou peço recolha | Ter flexibilidade na logística da doação | | US-10 | Utilizador | Ver o meu histórico de adopções e doações | Acompanhar o meu impacto ao longo do tempo | | US-11 | Utilizador | Activar o modo escuro | Reduzir cansaço visual ao usar a plataforma | | US-12 | Utilizador | Alterar a minha palavra-passe | Manter a minha conta segura | | US-13 | Canil | Gerir os meus animais registados | Ter controlo sobre quais animais estão disponíveis | | US-14 | Canil | Ver e confirmar reservas recebidas | Preparar o animal para o dia do levantamento | | US-15 | Canil | Indicar as minhas necessidades actuais | Receber doações específicas do que me faz falta | | US-16 | Admin | Supervisionar canis e utilizadores | Garantir qualidade e segurança da plataforma | --- ## 5.2 Fluxo de Registo ``` Visitante clica "Criar Conta" (menu — 3 traços, canto superior direito) │ ▼ Preenche formulário: • Nome completo • Email • Palavra-passe (mínimo 8 caracteres, 1 maiúscula, 1 número) • Confirmação de palavra-passe • Data de nascimento • Distrito • Checkbox: Concordo com os Termos e Política de Privacidade │ ▼ [Servidor] Valida se idade ≥ 18 anos ├── Não → Mostra erro: "É necessário ter 18 ou mais anos para criar conta" └── Sim → Continua │ ▼ [Servidor] Verifica se email já existe ├── Sim → Mostra erro: "Este email já está registado" └── Não → Cria conta com palavra-passe em bcrypt hash │ ▼ Envia email de verificação (Resend) │ ▼ Utilizador confirma email → Redirecionado para página inicial com sessão activa ``` --- ## 5.3 Fluxo de Login ``` Utilizador clica "Iniciar Sessão" no menu │ ▼ Preenche email e palavra-passe │ ▼ [Servidor] NextAuth verifica credenciais ├── Inválidas → Mostra erro genérico (não especificar qual campo falhou — segurança) └── Válidas → Cria sessão JWT │ ▼ Redirecionado para a página onde estava (ou página inicial) ``` --- ## 5.4 Fluxo Completo de Adopção ``` 1. DESCOBERTA ├── Página inicial → lista todos os animais disponíveis (SSR) ├── Filtros disponíveis: distrito, espécie, raça, sexo, esterilizado, faixa etária └── Animais urgentes têm badge "Urgente" destacado 2. DETALHES DO ANIMAL ├── Clica no animal → abre ficha completa ├── Galeria de fotos ├── Informações: nome, espécie, raça, idade, sexo, esterilizado, descrição └── Secção do canil → nome, distrito └── Clica no canil → modal/página com: • Morada completa • Horário de funcionamento (dia a dia) • Telefone e email 3. RESERVA ├── Clica "Adoptar" ├── [Sem sessão] → Redirect para login/registo com mensagem explicativa ├── [Com sessão] → Abre calendário de reservas ├── Dias disponíveis: dias em que o canil está aberto e sem reservas em excesso ├── Selecciona data → formulário de confirmação │ • Nome do utilizador (pré-preenchido) │ • Data seleccionada │ • Nome do animal e canil │ • Nota opcional para o canil └── Confirma 4. PÓS-RESERVA ├── Animal muda para status RESERVED ├── Email de confirmação enviado (Resend): │ • Assunto: "Reserva confirmada — [Nome do Animal] no [Nome do Canil]" │ • Data e hora de levantamento │ • Morada do canil │ • Horário de funcionamento │ • Instruções para cancelamento └── Reserva visível em "Conta → As Minhas Adopções" 5. DIA DO LEVANTAMENTO ├── Utilizador dirige-se ao canil na data marcada ├── Canil confirma levantamento → status muda para COMPLETED └── Animal muda para status ADOPTED ``` --- ## 5.5 Fluxo de Doação — Monetária ``` Clica "Fazer Doação" │ ▼ [Sem sessão] → Redirect para login com mensagem: "Para doar é necessário ter conta" [Com sessão, <18 anos] → Confirmação extra de data de nascimento │ ▼ Escolhe tipo: MONETÁRIA │ ▼ Escolhe canil: ┌── "Da minha localidade" → lista canis no distrito do utilizador └── "Outra localidade" → pesquisa por distrito/nome do canil │ ▼ Insere montante (mínimo: 1€) │ ▼ Escolhe método de pagamento: ┌── Cartão de Crédito/Débito └── MBWay (introduz número de telemóvel) │ ▼ Stripe processa pagamento (dados nunca passam nos nossos servidores) │ ▼ Confirmação: • Página de sucesso com animação • Email com recibo de doação • Visível em "Conta → Histórico de Doações" ``` --- ## 5.6 Fluxo de Doação — Ração / Brinquedos ``` Escolhe tipo: RAÇÃO ou BRINQUEDOS │ ▼ Lista de canis que necessitam e aceitam este tipo de donativo (baseada nas ShelterNeeds activas) │ ▼ Selecciona canil │ ▼ [RAÇÃO] Especifica: • Tipo: Seca / Húmida • Para: Cão / Gato • Faixa etária: Adulto / Filhote / Sénior [BRINQUEDOS] Especifica: • Categoria: Mordedor / Pelúcia / Interactivo / Corda │ ▼ Escolhe modalidade de entrega: ┌── "Levo eu ao canil" │ └── Mostra horários e morada do canil seleccionado └── "Quero recolha em casa" ├── Confirma/edita morada de recolha └── Selecciona data e período preferencial (manhã/tarde) │ ▼ Confirmação: • Canil recebe notificação com todos os detalhes • Utilizador recebe email de confirmação • Visível em "Conta → Histórico de Doações" ``` --- ## 5.7 Navegação e Menu O menu é acedido pelos **3 traços no canto superior direito** e contém: **Sem sessão:** - Iniciar Sessão - Criar Conta **Com sessão:** - A Minha Conta (nome do utilizador) - As Minhas Adopções - Histórico de Doações - Definições - Dados da Conta - Alterar Palavra-passe - Modo Escuro / Claro (toggle) - Terminar Sessão