Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cadastro e Login #1

Open
michelereginabora opened this issue Sep 12, 2024 · 2 comments
Open

Cadastro e Login #1

michelereginabora opened this issue Sep 12, 2024 · 2 comments
Assignees
Labels
enhancement New feature or request

Comments

@michelereginabora
Copy link
Owner

michelereginabora commented Sep 12, 2024

  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)
    • Criar entidade ONG (herda de Usuario)
    • Criar entidade ProtetorIndependente (herda de Usuario)
  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
    • Implementar caso de uso de recuperação de senha
  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
    • Implementar controller para recuperação de senha
  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
    • Implementar validação de CNPJ (para ONGs)
    • Implementar validação de CPF (para Protetores Independentes)
  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. Testes unitários

    • Escrever testes para casos de uso
    • Escrever testes para repositórios
    • Escrever testes para controllers
  10. Testes de integração

    • Implementar testes de integração para fluxos principais (cadastro, login, recuperação de senha)
  11. Documentação da API

    • Configurar Swagger para documentação automática da API
    • Adicionar descrições e exemplos para cada endpoint
  12. Configuração de ambiente

    • Criar perfis para desenvolvimento, teste e produção
    • Configurar variáveis de ambiente para dados sensíveis
  13. Implementação de logs

    • Configurar sistema de logging
    • Adicionar logs relevantes em pontos críticos da aplicação
  14. Otimização e performance

    • Implementar cache para consultas frequentes
    • Otimizar consultas ao banco de dados
  15. Implementação de funcionalidades adicionais

    • Criar endpoint para atualização de perfil de usuário
    • Implementar funcionalidade de upload de imagem de perfil
@michelereginabora michelereginabora added the enhancement New feature or request label Sep 12, 2024
@michelereginabora michelereginabora pinned this issue Sep 12, 2024
@michelereginabora
Copy link
Owner Author

michelereginabora commented Sep 12, 2024

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 michelereginabora self-assigned this Sep 23, 2024
@michelereginabora
Copy link
Owner Author

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
Status: In progress
Development

When branches are created from issues, their pull requests are automatically linked.

1 participant