Desenvolver uma API para criação de profile de usuario para uma Rede social, contemplando backend para visualização dos perfis cadastrados.
- Como visitante, quero me cadastrar informando nome, email, wpp, cpf e senha.
- Como visitante, quero confirmar a senha para ter certeza que não houve erros no preenchimento.
- Como usuário, quero fazer login
- Como usuário, quero adicionar foto de perfil
- Como usuário, quero substituir foto de perfil
- Como usuário, quero visualizar os dados do meu perfil
- Como administrador, quero visualizar os usuários cadastrados
$ git clone https://github.com/andradedaniel/oddie-test.git
$ cd oddie-test
$ cp .env.example .env
$ docker run --rm -it -v $PWD:/app --user $(id -u):$(id -g) composer:1.8.6 install
$ ./vendor/bin/sail up --build
$ ./vendor/bin/sail artisan storage:link
$ ./vendor/bin/sail artisan migrate --seed
Junto ao código do projeto existe um arquivo insomnia.json que pode ser utilizado na ferramenta Insomnia para realizar as requisições de teste. Importe esse arquivo no Insomnia a partir menu preferências na "Data".
Durante a configuração é criado um user Admin para teste. Os dados são:
email: admin@oddie.com
senha: 1234
Essas credenciais já estão configuradas no Insomnia como váriavel. Basta fazer a requisição "login" que o token de autenticação será armazenado e utilizado para as proximas requisições.
Para alterar essas credencias basta entrar em "Manage Environments" (CTRL + E) e alterar os parametros.
A implementação do teste foi realizando observando as seguintes premissas:
- Utilização de versões do PHP e Laravel iguais (ou próximas) às utilizadas pela Oddie;
- Foco em atender a rigor as User Stories estabelecidas para o teste. Muitas outras coisas poderiam ser feitas, mas fugiria do escopo de um teste;
- Diante do requisito de ser uma API, entendi ser conveniente para a situação a utilização do Laravel Sanctum para autenticação e autorização utilizando API Tokens;
- As demais funcionalidades (Registro, Login e Logout), devido a simplicidade da funcionalidade para efeito de teste, julguei ser mais indicado implementa-las manualmente e não utilizar packages do Laravel que já implementam essas funções (como o Fortify ou Breeze) mas que são de maior complexidade, extrapolando o contexto e o que foi solicitado no teste.