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

Desafio Finalizado #11

Open
wants to merge 19 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
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
49 changes: 27 additions & 22 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,24 +1,29 @@
![Bitcointoyou](https://bitcointoyou.com/_next/static/media/logoAzul.c6609791.png)

# Desafio - Desenvolvedor Fullstack - Júnior
Seja bem-vindo! Este desafio foi projetado para avaliar a sua capacidade técnica como candidato ao cargo proposto.

## Instruções
- Faça um fork deste repositório;
- O conjunto mínimo de tecnologias a serem utilizadas são: alguma das tecnologias front-end e back-end informadas na proposta desse desafio;
- Crie um passo a passo de como rodar a sua aplicação;
- Após finalizar, submeta um pull request com um comentário informando o seu e-mail de contato e aguarde nossa avaliação.

## Proposta
Você deverá desenvolver um projeto utilizando React no front-end e Node.js no back-end com a finalidade de que seja possível listar, visualizar, criar, editar e excluir carros de uma aplicação de anuncios de venda de automóveis.

**Observações:**
> - Você pode persistir os dados em memoria;
> - Cada carro precisa ter um identificador único, nome, marca, ano de fabricação e descrição;
> - Além dos dados do carro, é necessário também salvar os dados do dono do carro(nome, email e telefone de contato).
## Diferenciais
Serão considerados diferenciais:

- Conhecimento sólido em Expo ou React Native;
- Boas práticas de escrita de código (código limpo, padrões de arquitetura, etc.);
- Conhecimento em infraestruturas em nuvem;
# Instruções para rodar o projeto completamente:

### 1 - Rode primeiro o Back-end...

As instruções detalhadas de como rodar o projeto Back-end estão no README que está dentro da pasta ``backend`` desse projeto.

### 2 - Em seguida rode o Front-end...

As instruções detalhadas de como rodar o projeto Front-end estão no README que está dentro da pasta ``frontend`` desse projeto.

### 3 - Após isso, você poderá testar o APP em funcionamento!

######

## :man: Autor
<a href="https://github.com/lanziotti/">
<br />
<sub><b>Rodrigo Lanziotti (Github)</b></sub>
</a>
<a href="https://www.linkedin.com/in/rodrigo-lanziotti-16a64966/">
<br />
<sub><b>Rodrigo Lanziotti (LinkedIn)</b></sub>
</a>

######

Feito por Rodrigo Lanziotti :wave::wave: Entre em contato sempre que quiser!🚀
7 changes: 7 additions & 0 deletions backend/.env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
PORT=

DB_HOST=
DB_PORT=
DB_USER=
DB_PASS=
DB_DATABASE=
3 changes: 3 additions & 0 deletions backend/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
node_modules

.env
181 changes: 181 additions & 0 deletions backend/Insomnia_collection
Original file line number Diff line number Diff line change
@@ -0,0 +1,181 @@
{
"_type": "export",
"__export_format": 4,
"__export_date": "2023-01-19T18:02:28.960Z",
"__export_source": "insomnia.desktop.app:v2022.7.1",
"resources": [
{
"_id": "req_e0996feebcd94495b5278b3003d9bdde",
"parentId": "wrk_b8947cafccf645b5a7bd36a6ce2a9c2c",
"modified": 1674150551075,
"created": 1674135652307,
"url": "http://localhost:3000/carros",
"name": "Cadastrar Carro",
"description": "",
"method": "POST",
"body": {
"mimeType": "application/json",
"text": "{\n\t\"nome\": \"Pálio\",\n\t\"marca\": \"Fiat\",\n\t\"ano_fabricacao\": 2004,\n\t\"descricao\": \"Bom carro\",\n\t\"nome_dono\": \"Carlos Alberto\",\n\t\"email_dono\": \"ca@email.com\",\n\t\"telefone_dono\": \"(32)98771-4025\"\n}"
},
"parameters": [],
"headers": [
{
"name": "Content-Type",
"value": "application/json"
}
],
"authentication": {},
"metaSortKey": -1674135652307,
"isPrivate": false,
"settingStoreCookies": true,
"settingSendCookies": true,
"settingDisableRenderRequestBody": false,
"settingEncodeUrl": true,
"settingRebuildPath": true,
"settingFollowRedirects": "global",
"_type": "request"
},
{
"_id": "wrk_b8947cafccf645b5a7bd36a6ce2a9c2c",
"parentId": null,
"modified": 1674133781848,
"created": 1674133781848,
"name": "Desafio Bitcointoyou",
"description": "",
"scope": "collection",
"_type": "workspace"
},
{
"_id": "req_63a8ad78619449d1bc7dc66648788afd",
"parentId": "wrk_b8947cafccf645b5a7bd36a6ce2a9c2c",
"modified": 1674141532466,
"created": 1674141524476,
"url": "http://localhost:3000/carros",
"name": "Listar Carros",
"description": "",
"method": "GET",
"body": {},
"parameters": [],
"headers": [],
"authentication": {},
"metaSortKey": -1673620679197,
"isPrivate": false,
"settingStoreCookies": true,
"settingSendCookies": true,
"settingDisableRenderRequestBody": false,
"settingEncodeUrl": true,
"settingRebuildPath": true,
"settingFollowRedirects": "global",
"_type": "request"
},
{
"_id": "req_3575b72f027946d38b8aa69f8d8c16d7",
"parentId": "wrk_b8947cafccf645b5a7bd36a6ce2a9c2c",
"modified": 1674142240052,
"created": 1674142152647,
"url": "http://localhost:3000/carros/2",
"name": "Visualizar Carro",
"description": "",
"method": "GET",
"body": {},
"parameters": [],
"headers": [],
"authentication": {},
"metaSortKey": -1673363192642,
"isPrivate": false,
"settingStoreCookies": true,
"settingSendCookies": true,
"settingDisableRenderRequestBody": false,
"settingEncodeUrl": true,
"settingRebuildPath": true,
"settingFollowRedirects": "global",
"_type": "request"
},
{
"_id": "req_e2ea425730094844a9d4bbed940036b2",
"parentId": "wrk_b8947cafccf645b5a7bd36a6ce2a9c2c",
"modified": 1674143715878,
"created": 1674143631186,
"url": "http://localhost:3000/carros/3",
"name": "Editar Carro",
"description": "",
"method": "PUT",
"body": {
"mimeType": "application/json",
"text": "{\n\t\"nome\": \"Corsa\",\n\t\"marca\": \"Chevrolet\",\n\t\"ano_fabricacao\": 1998,\n\t\"descricao\": \"Horrivel\",\n\t\"nome_dono\": \"Pedro Castro\",\n\t\"email_dono\": \"pedro@email.com\",\n\t\"telefone_dono\": \"(32)98875-6231\"\n}"
},
"parameters": [],
"headers": [
{
"name": "Content-Type",
"value": "application/json"
}
],
"authentication": {},
"metaSortKey": -1673234449364.5,
"isPrivate": false,
"settingStoreCookies": true,
"settingSendCookies": true,
"settingDisableRenderRequestBody": false,
"settingEncodeUrl": true,
"settingRebuildPath": true,
"settingFollowRedirects": "global",
"_type": "request"
},
{
"_id": "req_2afa2f5aa9a74f0da195807733beee78",
"parentId": "wrk_b8947cafccf645b5a7bd36a6ce2a9c2c",
"modified": 1674150476354,
"created": 1674150384772,
"url": "http://localhost:3000/carros/10",
"name": "Deletar Carro",
"description": "",
"method": "DELETE",
"body": {},
"parameters": [],
"headers": [],
"authentication": {},
"metaSortKey": -1673170077725.75,
"isPrivate": false,
"settingStoreCookies": true,
"settingSendCookies": true,
"settingDisableRenderRequestBody": false,
"settingEncodeUrl": true,
"settingRebuildPath": true,
"settingFollowRedirects": "global",
"_type": "request"
},
{
"_id": "env_45f3b85b62d5ced64fc561aaa9dc6fbb1875e2bc",
"parentId": "wrk_b8947cafccf645b5a7bd36a6ce2a9c2c",
"modified": 1674133781852,
"created": 1674133781852,
"name": "Base Environment",
"data": {},
"dataPropertyOrder": null,
"color": null,
"isPrivate": false,
"metaSortKey": 1674133781852,
"_type": "environment"
},
{
"_id": "jar_45f3b85b62d5ced64fc561aaa9dc6fbb1875e2bc",
"parentId": "wrk_b8947cafccf645b5a7bd36a6ce2a9c2c",
"modified": 1674133781853,
"created": 1674133781853,
"name": "Default Jar",
"cookies": [],
"_type": "cookie_jar"
},
{
"_id": "spc_01125e32181443fe8df7ac356c209767",
"parentId": "wrk_b8947cafccf645b5a7bd36a6ce2a9c2c",
"modified": 1674133781849,
"created": 1674133781849,
"fileName": "Desafio Bitcointoyou",
"contents": "",
"contentType": "yaml",
"_type": "api_spec"
}
]
}
106 changes: 106 additions & 0 deletions backend/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
![Bitcointoyou](https://bitcointoyou.com/_next/static/media/logoAzul.c6609791.png)

# CRUD Restful API de carros

<h1 align="center">
<br />
<a href="https://www.linkedin.com/in/rodrigo-lanziotti-16a64966/">
</a>
</h1>
<p align="center">
<a href="#page_facing_up-descrição">Descrição</a>&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;
<a href="#-tecnologias">Tecnologias</a>&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;
<a href="#clipboard-Funcionalidades">Funcionalidades</a>&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;
<a href="#closed_book-instalação">Instalação</a>&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;
<a href="#man-Autor">Autor</a>&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;
</p>

## :page_facing_up: Descrição

Projeto feito para a candidatura para a vaga de Desenvolvedor Fullstack Júnior na BitcoinToYou e que consiste de um CRUD de carros (criar, listar, visualizar, editar e excluir).

## 🛠 Tecnologias

### App

- [Javascript](https://developer.mozilla.org/en-US/docs/Web/JavaScript)
- [Node.js](https://nodejs.org/)
- [Express](https://expressjs.com/pt-br/)
- [Cors](https://www.npmjs.com/package/cors)
- [Knex](https://knexjs.org/)
- [Joi](https://joi.dev/api/?v=17.7.0)
- [Dotenv](https://www.npmjs.com/package/dotenv)
- [Nodemon](https://github.com/remy/nodemon#nodemon)
- [Jest](https://jestjs.io/)
- [Supertest](https://www.npmjs.com/package/supertest)
- [Swagger](https://swagger.io/docs/)

### Banco de Dados

- [PostgreSQL](https://www.postgresql.org/docs/)

## :clipboard: Funcionalidades

- Cadastro de um Carro
- Listagem dos Carros
- Visualização dos dados de um Carro específico
- Edição dos dados de um Carro específico
- Exclusão de um Carro específico

## :closed_book: Instalação

### Pré-requisitos

Antes de começar, você vai precisar ter instalado em sua máquina as seguintes ferramentas:
[Git](https://git-scm.com), [Node.js](https://nodejs.org/en/).
Além disto é bom ter um editor para trabalhar com o código como [VSCode](https://code.visualstudio.com/)

#### Iniciando Back-End

- Abra o VSCode na sua pasta de preferência
######
- Com o terminal aberto, faça o clone deste repositório;
`$ git clone https://github.com/lanziotti/desafio-dev-junior-b2u.git`
######
- Navegue até a pasta onde esta o app;
`$ cd desafio-dev-junior-b2u/backend`
######
- Instale as dependências;
`$ yarn ou npm install`
######
- Na pasta raíz do projeto, crie um arquivo `.env` usando como base o arquivo já existente `.env.example` e preencha os valores das variáveis sem haver nenhum espaço entre os caracteres. Exemplo:

```
PORT=3000

DB_HOST=localhost
DB_PORT=5432
DB_USER=postgres
DB_PASS=123456
DB_NAME=bitcointoyou_carros
````
OBS: As variáveis que começam com "DB_" são referentes ao banco de dados. Portanto, antes desse processo, o banco de dados já deve estar criado. Para isso, pode-se usar um Gerenciador de Banco de Dados como o [Beekeeper Studio](https://www.beekeeperstudio.io/)
######

- Execute a aplicação;
`$ yarn dev ou npm run dev`
######

- O app vai está rodando na porta 3000 (de acordo com o exemplo acima)
######

- Acesse <http://localhost:3000/api-docs> para testar os endpoints pelo Swagger

## :man: Autor
<a href="https://github.com/lanziotti/">
<br />
<sub><b>Rodrigo Lanziotti (Github)</b></sub>
</a>
<a href="https://www.linkedin.com/in/rodrigo-lanziotti-16a64966/">
<br />
<sub><b>Rodrigo Lanziotti (LinkedIn)</b></sub>
</a>

######

Feito por Rodrigo Lanziotti :wave::wave: Entre em contato sempre que quiser!🚀
Loading