Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/dersonsena/send4-challenge

Send4 Challenge
https://github.com/dersonsena/send4-challenge

Last synced: 8 days ago
JSON representation

Send4 Challenge

Awesome Lists containing this project

README

        

# Send4 Challenge

Feito por: Kilderson Sena ([@dersonsena](https://github.com/dersonsena))

Nesse projeto você poderá rodar uma API desenvolvido feita com Laravel e integrado com o [Shopify](https://pt.shopify.com). Mais detalhes sobre as funcionalidades pode ser visto no [Documento de Requisitos](/documento-requisitos.pdf) do teste.

## Pré-requisitos

É requisito obrigatório para rodar este projeto:

- Docker;
- Usar um host UNIX;

## Instalação

### Clone do Repositório

Abra seu terminal e faça o clone deste projeto:

```bash
$ git clone [email protected]:dersonsena/send4-challenge.git
```

### Arquivo `.env`

Entre no diretório do projeto e faça uma cópia do `.env.example` renomeando para `.env` e preencha as variáveis de ambiente:

```bash
$ cd send4-challenge
$ cp .env.example .env
```

No arquivo `.env` já é sugerido alguns valores para algumas variáveis de ambiente, mas, fique a vontade para alterá-las de acordo com seu ambiente.

### Variáveis de Ambiente

Algumas variáveis de ambiente devem ser configuradas para que você consiga subir a API em sua máquina.

No parâmetro abaixo coloque uma senha de sua preferência para o usuário root do MySQL Server:
```
DB_PASSWORD=secret
```

A API é integrada com uma loja do Shopify e para essa integração funcionar é necessário informar a `API KEY` e o `PASSWORD`. Você pode acessar esses valores no [Documento de Requisitos](/documento-requisitos.pdf) para poder preencher no seu arquivo `.env`.
```
SHOPIFY_API_KEY=
SHOPIFY_PASSWORD=
```

Alguns endpoints precisam fazer envio de e-mail e para isso precisamos configurar algumas informações para ter êxito. Eu criei uma conta no [Mailtrap](https://mailtrap.io) para poder usar neste teste, então, você pode usar as credenciais abaixo:
```
MAIL_PORT=2525
MAIL_USERNAME=ed8e4adb29a1d4
MAIL_PASSWORD=f528c4edabe064
MAIL_ENCRYPTION=tls
[email protected]
MAIL_FROM_NAME="Send4 Notifications"
```

### 4 - Fazendo setup

Execute o comando abaixo para ser executado uma espécie de pipeline de instalação e configuração do projeto:

```bash
$ make setup
```

Se ocorrer tudo certo durante o setup os containers docker já estarão de pé e prontos para serem consumidos

> **IMPORTANTE:** ao terminar o setup o serviço de filas do laravel ficará sendo executando em background. Você poder cancelar esse processo com `CTRL + C` e para subir novamente o serviço basta executar o comando `make queueWork`.

## Enpoints

Foi utilizado a convenção do [JSEnd](https://github.com/omniti-labs/jsend) para padronizar todos os payloads dos serviços. Dessa forma fica mais fácil e organizado para quem vai consumir essa API tratar as informações.

### Login

URL: `GET /api/auth/[email protected]&password=admin`

> **IMPORTANTE:** ao consumir esse serviço, você deverá pegar o Token JWT de autenticação para serem informados nos outros serviços

### Me

URL: `GET /api/users/me`

Header: `Authorization Bearer `

### Register

URL: `POST /api/users/register`

Header: `Authorization Bearer `

Body: `{"name": "José da Silva", "email": "[email protected]", "password": "123456"}`

### My Favorites

URL: `GET /api/products/favorites`

Header: `Authorization: Bearer `

### Favorite Product

URL: `POST /api/products/favorite/`

Header: `Authorization: Bearer `

### Disfavor Product

URL: `POST /api/products/disfavor/`

Header: `Authorization: Bearer `

## Tests

Para executar os testes de integração do projeto, basta executar o comando:

```bash
$ make test
```

Para melhorar ainda mais a leitura dos testes, foi configurado um [Printer personalizado](https://github.com/mikeerickson/phpunit-pretty-result-printer). Você deverá ver um resultado como o da screenshot abaixo:

![PHPUnit Output](/resources/docs/phpunit-output.jpg)

A relatório de cobertura por ser visto pela URL:

```
http://localhost:8001/coverage-report/index.html
```

## GitFlow

Foi utilizado a convenção do GitFlow para organização das branches. As branches podem ser vistas aqui no repositório como é ilustrado abaixo:

![PHPUnit Output](/resources/docs/gitflow.png)

## Sobre o Makefile

Eu desenvolvi um script [makefile](/makefile) que só dá para ser usando nativamente em hosts UNIX. Eu uso esse script para executar rapidamente comandos dentro dos container Docker me tornando um pouco mais produtivo em comandos rotineiros. Vide exemplo abaixo:

```bash
$ make migrate
```

Esse script irá executar o comando abaixo.

```
$ docker exec -it ${DOCKER_APP_SERVICE_NAME} php artisan migrate
```

A variável de ambiente `${DOCKER_APP_SERVICE_NAME}` representa o nome do serviço relacionado ao servidor web onde estará rodando a API que pode ser visto no seu arquivo `.env`.