Giter VIP home page Giter VIP logo

clickfacil-backend-teste's Introduction

Sobre o desafio

Esse projeto tem como objetivo resolver o seguinte desafio:

  • Criar um CRUD de rotas de API para o cadastro de bolos.
  • Os bolos deverão ter Nome, Peso (em gramas), Valor, Quantidade disponível e uma lista de e-mail de interessados.
  • Após o cadastro de e-mails interessados, caso haja bolo disponível, o sistema deve enviar um e-mail para os interessados sobre a disponibilidade do bolo.

Casos a avaliar:

Pode ocorrer de 50.000 clientes se cadastrarem e o processo de envio de emails não deve ser algo impeditivo.

Instalação e Configuração

Requisitos

Para instalar o projeto em sua máquina são necessários as seguintes ferramentas:

  • PHP 7.4
  • Composer
  • MySQL
  • Docker

Instalação

Primeiramente clone o repositório com o seguinte comando:

git clone https://github.com/JoaoVictorViana/clickfacil-backend-teste.git

Em seguida, entre na pasta do projeto

cd clickfacil-backend-teste

E então instale todas as dependências:

composer install

Configuração

Quando finalizar a instalação, crie o arquivo .env com base no arquivo .env.example e coloque as configurações do seu banco de dados.

cp .env.example .env

Atenção: A fins de otimização e de teste, está sendo utilizando o Redis para as queues e Mailhog para o envio de e-mails.

Em seguida rode o seguinte comando para gerar a API_KEY:

php artisan key:generate

Atenção: A fins de otimização e de teste, está sendo utilizando o Redis para as queues e Mailhog para o envio de e-mails. Caso não tenham essas ferramentas em sua máquina, foi incluido neste projeto, as imagens em Docker necessárias, basta executar o comando: docker-compose up -d

Execute também os seguintes comandos para limpar a cache:

php artisan cache:clear php artisan config:cache

Banco de dados

Depois de ter feito todas as configurações será necessário criar o banco de dados em sua máquina e em seguida roda o comando:

php artisan migrate

Pronto agora o projeto está pronto para ser testado!

API

Para resolve o desafio foi construido uma API. Segue as lista de todas as endpoints, assim como também o que é esperado como entrada e seu respectivo retorno:

Endpoints de Bolo:

  • (GET) "/api/cake": Retorna todos os bolos cadastrados.

    • Retorno: HTTP/1.1 200 OK
    • ["data": [[cake_id": 1, "name": 'Teste', "weight": 300, "price": 180.00, "quantity": 10, "emails": []]]]
  • (POST) "/api/cake": Cadastra um novo bolo.

    • Data: ["name": 'Teste', "weight": 300, "price": 180.00, "quantity": 10, "list_emails": []]
    • Retorno: HTTP/1.1 201 OK
    • ["data": ["cake_id": 1, "name": 'Teste', "weight": 300, "price": 180.00, "quantity": 10, "emails": []]]
  • (GET) "/api/cake/{id}": Busca por um específico bolo.

    • Retorno: HTTP/1.1 200 OK
    • ["data": ["cake_id": 1, "name": 'Teste', "weight": 300, "price": 180.00, "quantity": 10, "emails": []]]
  • (PUT) "/api/cake/{id}": Atualiza um específico bolo.

    • Data: ["name": 'Teste Edit']
    • Retorno: HTTP/1.1 200 OK
    • ["message": "Bolo atualizado com sucesso!"]
  • (DELETE) "/api/cake/{id}": Remove um específico bolo.

    • Retorno: HTTP/1.1 200 OK
    • ["message": "Bolo deletado com sucesso!"]

Endpoints de Email:

  • (GET) "/api/email": Retorna todos os emails cadastrados.

    • Retorno: HTTP/1.1 200 OK
    • ["data": ["email_interested_cake_id": 1, "cake_id_fk": 1, "email": "[email protected]"]]
  • (POST) "/api/email": Cadastra um novo e-mail.

    • Data: ["cake_id_fk": 1, "email": "teste@gmail"]
    • Retorno: HTTP/1.1 201 OK
    • ["data": []]
  • (POST) "/api/email/list": Cadastra uma lista de e-mails.

    • Data: ["cake_id_fk": 1, "list_emails": ["teste@gmail"]]
    • Retorno: HTTP/1.1 200 OK
    • ["data": []]
  • (GET) "/api/email/{id}": Busca por um específico email.

    • Retorno: HTTP/1.1 200 OK
    • ["data": ["email_interested_cake_id": 1, "cake_id_fk": 1, "email": "[email protected]"]]
  • (PUT) "/api/email/{id}": Atualiza um específico e-mail.

    • Data: ["email": 'teste@teste']
    • Retorno: HTTP/1.1 200 OK
    • ["message": "E-mail atualizado com sucesso!"]
  • (DELETE) "/api/email/{id}": Remove um específico bolo.

    • Retorno: HTTP/1.1 200 OK
    • ["message": "E-mail deletado com sucesso!"]

Testes

Antes de realizar todos os testes, fique atento a essas duas observações:

  • Está sendo utilizado o Redis para processar a Queue, portanto, para testar os envios de e-mails, será necessário executar alguns dos seguintes comandos ou instale o supervisor:
    • Antes de executar os testes: php artisan queue:listen
    • Depois de executar os testes: php artisan queue:work
  • Como está sendo utilizado o Redis para executar a Queue de forma asyncrona, é necessário armazenar a queue, portanto não está sendo utilizando o RefreshDatabase do Laravel. Com isso é necessário rodar o seguinte comando antes e depois de executar os testes: php artisan migrate:fresh

E para realizar todos os testes, utilize o comando:

php artisan test

Caso tenha instalado e configurado tudo de forma correta, espera-se que todos os testes sejam concluidos com sucesso!

License

The Laravel framework is open-sourced software licensed under the MIT license.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.