Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# Environment: LOCAL | DEVELOP | STAGING | PRODUCTION
ENVIRONMENT=

# Environment Local
LOCAL_HOST=
LOCAL_USER=
LOCAL_PASSWORD=
LOCAL_DATABASE=
LOCAL_DEBUG=

# Environment Develop
DEVELOP_HOST=
DEVELOP_USER=
DEVELOP_PASSWORD=
DEVELOP_DATABASE=
DEVELOP_DEBUG=

# Environment Staging
STAGING_HOST=
STAGING_USER=
STAGING_PASSWORD=
STAGING_DATABASE=
STAGING_DEBUG=

# Environment Production
PRODUCTION_HOST=
PRODUCTION_USER=
PRODUCTION_PASSWORD=
PRODUCTION_DATABASE=
PRODUCTION_DEBUG=
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
.env
.idea
294 changes: 268 additions & 26 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,34 +1,276 @@
# A tarefa
Sua tarefa consiste em desenvolver uma API RESTful para manipular um determinado recurso.
### Tecnologias utilizadas:
- Composer
- Silex
- Doctrine
- MySQL
- Servidor Web: Nginx + PHP-FPM
- PHP 7.0

# Requisitos
A escolha do recurso deverá ser feita pelo desenvolvedor, atendendo apenas os requisitos mínimos abaixo:
### Arquivos inclusos:
- **data/Test.postman_collection.json** - Arquivo do Postman com as rotas criadas e a autenticação configurada para Basic Auth.
- **data/db.sql** - Arquivo com o Dump do Banco de Dados

* Deverá conter um ID
* Deverá conter pelo menos cinco propriedades (exemplos: nome, email, etc.)
* Deverá conter campos que armazenem as datas de criação e alteração do recurso
### Como configurar o projeto:
1. Rodar o comando "php composer.phar install"

A API deverá atender às seguintes exigências:
2. Criar o banco de dados

* Listagem de todos os recursos
* Busca de um recurso pelo ID
* Criação de um novo recurso
* Alteração de um recurso existente
* Exclusão de um recurso
* Aceitar e retornar apenas JSON
* Deverá possuir algum método de autenticação para utilização de seus endpoints
3. Configurar o arquivo .env. Arquivo fica na raíz do projeto (.env.example) deve-ser criar um arquivo .env na raíz do projeto e configurar as seguintes informações:
* ENVIRONMENT = Ambiente que está rodando (Produção, desenvolvimento, etc.)
* HOST = host do banco de dados
* USER = usuário do banco de dados
* PASSWORD = senha do usuário do banco de dados
* DATABASE = nome do banco de dados
* DEBUG = modo debug | true ou false

# Ferramentas
* PHP
* Banco de dados SQLite
* Frameworks à escolha do desenvolvedor
4. Adicionar a pasta data/Proxy com permissão para escrita

# Fluxo de desenvolvimento
1. Faça um fork deste repositório
2. Crie uma nova branch e nomeie-a com seu usuário do Github
3. Quando o desenvolvimento estiver concluído, faça um pull request
5. Rodar o comando **bin/doctrine orm:schema-tool:update --dump-sql -f** para criar as entidades no banco de dados (Também pode importar o db.sql caso preferir)

# Padrões de nomenclatura
1. Código fonte, nome do banco de dados, tabelas e campos devem estar em inglês
### Configurações Nginx que foram utilizadas:
```
server {
listen 80;
server_name local.capgemini;

root /var/www/local.capgemini/public;
index index.php index.html index.htm;
access_log /var/log/nginx/local.capgemini-access;
error_log /var/log/nginx/local.capgemini-error;

**Inclua no seu commit todos os arquivos necessários para que possamos testar o código.**
location / {
try_files $uri $uri/ /index.php?$args;
fastcgi_read_timeout 5m;
index index.html index.htm index.php;
}

error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}

location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#fastcgi_param ENVIRONMENT staging;
include fastcgi_params;
}
}
```

## Documentação da API

### Modo de Autenticação:
- Utilizado Basic Auth
- Usuário: teste
- Senha: teste123

### Rota:
**Método e Recurso:** GET - /person

**Descrição:** Lista todas as pessoas

**Json retorno:**
```
{
"code": 200,
"message": "Requisição efetuada com sucesso.",
"data": [
{
"first_name": "André",
"last_name": "Felipe",
"email": "email@email.com",
"gender": "M",
"is_active": true,
"id": 2,
"created_at": {
"date": "2017-03-08 06:53:35.000000",
"timezone_type": 3,
"timezone": "America/Sao_Paulo"
},
"updated_at": null,
"deleted_at": null
},
{
"first_name": "João",
"last_name": "Almeida",
"email": "joao@email.com",
"gender": "M",
"is_active": true,
"id": 3,
"created_at": {
"date": "2017-03-08 06:54:45.000000",
"timezone_type": 3,
"timezone": "America/Sao_Paulo"
},
"updated_at": null,
"deleted_at": null
},
{
"first_name": "Rafaela",
"last_name": "Garcia",
"email": "rafaela@email.com",
"gender": "F",
"is_active": true,
"id": 4,
"created_at": {
"date": "2017-03-08 06:54:59.000000",
"timezone_type": 3,
"timezone": "America/Sao_Paulo"
},
"updated_at": null,
"deleted_at": null
}
]
}
```

### Rota:
**Método e Recurso:** GET - /person/{id}

**Descrição:** Busca apenas uma pessoa por ID

**Json retorno:**
```
{
"code": 200,
"message": "Requisição efetuada com sucesso.",
"data": {
"first_name": "André",
"last_name": "Felipe",
"email": "email@email.com",
"gender": "M",
"is_active": true,
"id": 1,
"created_at": {
"date": "2017-03-08 06:53:35.000000",
"timezone_type": 3,
"timezone": "America/Sao_Paulo"
},
"updated_at": null,
"deleted_at": null
}
}
```

### Rota:
**Método e Recurso:** POST - /person

**Descrição:** Cria uma pessoa

**Json envio:**
```
{
"first_name": "André",
"last_name": "Felipe",
"email": "email@email.com",
"gender": "M",
"active": true
}
```

**Json retorno:**
```
{
"code": 200,
"message": "Requisição efetuada com sucesso.",
"data": {
"first_name": "André",
"last_name": "Felipe",
"email": "email@email.com",
"gender": "M",
"is_active": true,
"id": 5,
"created_at": {
"date": "2017-03-08 06:58:03.000000",
"timezone_type": 3,
"timezone": "America/Sao_Paulo"
},
"updated_at": null,
"deleted_at": null
}
}
```

### Rota:
**Método e Recurso:** PUT - /person

**Descrição:** Atualiza uma pessoa com base no seu ID

**Json envio:**
```
{
"id": 1,
"first_name": "André alterado",
"last_name": "Felipe",
"email": "email@email.com",
"gender": "M",
"active": false
}
```

**Json retorno:**
```
{
"code": 200,
"message": "Requisição efetuada com sucesso.",
"data": {
"first_name": "André alterado",
"last_name": "Felipe",
"email": "email@email.com",
"gender": "M",
"is_active": false,
"id": 1,
"created_at": {
"date": "2017-03-08 06:53:35.000000",
"timezone_type": 3,
"timezone": "America/Sao_Paulo"
},
"updated_at": {
"date": "2017-03-08 06:59:32.000000",
"timezone_type": 3,
"timezone": "America/Sao_Paulo"
},
"deleted_at": null
}
}
```

### Rota:
**Método e Recurso:** DELETE - /person/{id}

**Descrição:** Deleta uma pessoa com base em seu ID

**Json retorno:**
```
{
"code": 200,
"message": "Requisição efetuada com sucesso.",
"data": {
"first_name": "André alterado",
"last_name": "Felipe",
"email": "email@email.com",
"gender": "M",
"is_active": false,
"id": 1,
"created_at": {
"date": "2017-03-08 06:53:35.000000",
"timezone_type": 3,
"timezone": "America/Sao_Paulo"
},
"updated_at": {
"date": "2017-03-08 06:59:32.000000",
"timezone_type": 3,
"timezone": "America/Sao_Paulo"
},
"deleted_at": {
"date": "2017-03-08 07:00:23.000000",
"timezone_type": 3,
"timezone": "America/Sao_Paulo"
}
}
}
```
30 changes: 30 additions & 0 deletions composer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"type": "library",
"authors": [
{
"name": "André Felipe de Souza",
"email": "andre.felipe3@gmail.com.br",
"role": "PHP Developer"
}
],
"require": {
"php": ">=7.0.0",
"silex/silex": "2.0.*",
"doctrine/dbal": "2.*",
"doctrine/orm": "2.*",
"symfony/yaml": "^2.7",
"vlucas/phpdotenv": "2.*",
"zendframework/zend-hydrator": "^2.0",
"zendframework/zend-filter": "^2.6",
"zendframework/zend-servicemanager": "^2.5.1"
},
"require-dev": {
"squizlabs/php_codesniffer": "2.*"
},
"autoload": {
"psr-4": { "": "src/API/" }
},
"config": {
"bin-dir": "bin/"
}
}
Binary file added composer.phar
Binary file not shown.
Loading