michelereginabora / adote-na-web-backend

Este repositório implementa o backend do Adote na Web. Utiliza Java 17, Spring 3.3.3, Spring Web, Spring Data JPA , PostgreSQL Driver, Lombok, Spring Security, Validation e Swagger.
MIT License
1 stars 0 forks source link

Cadastro e Login #1

Closed michelereginabora closed 1 month ago

michelereginabora commented 2 months ago
  1. Configuração inicial do projeto

    • Criar projeto Spring Boot com dependências necessárias
    • Configurar conexão com o banco de dados PostgreSQL
  2. Implementação das entidades

    • Criar entidade Usuario (campos comuns)
  3. Camada de casos de uso (regras de negócio)

    • Implementar caso de uso de cadastro de usuário
    • Implementar caso de uso de login
  4. Camada de repositórios

    • Criar interface de repositório para Usuario
    • Implementar repositório usando Spring Data JPA
  5. Camada de controllers (API REST)

    • Implementar controller para cadastro de usuário
    • Implementar controller para login
  6. Implementação de validações

    • Criar validadores para campos obrigatórios
    • Implementar validação de formato de e-mail
    • Implementar validação de formato de telefone
  7. Implementação de segurança

    • Configurar Spring Security
    • Implementar autenticação baseada em token JWT
    • Implementar proteção de rotas
  8. Tratamento de erros e exceções

    • Criar handler para exceções personalizadas
    • Implementar respostas de erro padronizadas
  9. Documentação da API

    • Configurar Swagger para documentação automática da API
michelereginabora commented 2 months ago

Image


Legenda da Modelagem UML:

  1. Entidades Principais:

    • User: Representa o usuário principal do sistema.
    • ProfileType: Enum que define os tipos de perfil disponíveis.
    • Location: Armazena informações detalhadas de localização.
    • NGOProfile: Perfil específico para ONGs.
    • IndependentProtectorProfile: Perfil para protetores independentes.
    • AdopterProfile: Perfil para adotantes.
    • CommonUserProfile: Perfil para usuários comuns.
  2. Atributos-chave:

    • id: Identificador único para cada entidade.
    • email, phone, name, password: Informações básicas do usuário.
    • profileType: Define o tipo de perfil ativo do usuário.
    • isAdmin: Indica se o usuário tem privilégios de administrador.
    • creationDate: Data de criação da conta.
    • profilePicture: URL ou caminho para a foto de perfil (opcional).
  3. Métodos importantes:

    • register(): Realiza o registro do usuário.
    • authenticate(): Autentica o usuário.
    • resetPassword(): Permite a redefinição de senha.
    • updateProfile(): Atualiza as informações do perfil.
    • updateProfilePicture(): Atualiza especificamente a foto de perfil.
  4. Relações:

    • User tem exatamente um ProfileType.
    • User está associado a um dos perfis específicos (NGO, IndependentProtector, Adopter, ou CommonUser), dependendo do ProfileType.
    • NGOProfile, IndependentProtectorProfile, e AdopterProfile estão associados a uma Location.
  5. Notas importantes:

    • Embora o diagrama mostre relações "1 para 1" entre User e todos os tipos de perfil, na implementação, um User terá apenas um perfil ativo baseado no profileType.
    • O CommonUserProfile é o perfil padrão se nenhum outro for especificado durante o registro.
    • A foto de perfil é opcional e pode ser nula ou vazia.
    • Location é obrigatória para NGO, IndependentProtector e Adopter, mas não para CommonUser.
  6. Campos específicos por tipo de perfil:

    • NGOProfile e IndependentProtectorProfile:
      • description: Descrição da ONG ou do protetor.
      • communicationChannels: Lista de canais de comunicação.
      • financialAidMethods: Métodos para receber auxílio financeiro.
    • NGOProfile: cnpj (obrigatório)
    • IndependentProtectorProfile: cpf (obrigatório)
    • AdopterProfile: adoptionPreferences (preferências de adoção)
    • CommonUserProfile: additionalInfo (informações adicionais opcionais)
  7. Implementação:

    • O sistema deve garantir que apenas um perfil esteja ativo por usuário, correspondendo ao profileType.
    • A lógica de negócios deve tratar o CommonUserProfile como padrão se nenhum outro for escolhido.
    • Campos opcionais (como profilePicture) devem ser tratados adequadamente na interface e no banco de dados.
  8. Considerações de banco de dados:

    • Cada tipo de perfil (NGO, IndependentProtector, Adopter, CommonUser) pode ser implementado como uma tabela separada, todas relacionadas à tabela principal de usuários.
    • A tabela de usuários deve incluir uma coluna para o tipo de perfil (profileType) para fácil referência.

Relações: a. Associação (linha contínua com seta aberta):

Entre User e ProfileType: Indica que um User está associado a um ProfileType. Entre User e os perfis específicos (NGOProfile, IndependentProtectorProfile, AdopterProfile, CommonUserProfile): Representa a associação entre um usuário e seu perfil específico. Entre os perfis específicos (NGO, IndependentProtector, Adopter) e Location: Indica que estes perfis estão associados a uma localização.

b. Enumeração (indicado pelo estereótipo <>):

ProfileType: Representa um conjunto fixo de valores para os tipos de perfil.

c. Multiplicidade:

"1" em todas as relações: Indica que cada entidade está relacionada a exatamente uma instância da outra entidade.

Esta modelagem proporciona uma estrutura flexível para gerenciar diferentes tipos de usuários, mantendo informações comuns centralizadas e permitindo extensões específicas para cada tipo de perfil.

michelereginabora commented 1 month ago

Implementado JWT e role de usuário As rotas foram organizadas em Públicas, Autenticadas e de Admin