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 dev junior #14

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node_modules
57 changes: 33 additions & 24 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,24 +1,33 @@
![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;
# desafio-dev-junior-b2u

Projeto separado em duas pastas (Back-end e Front-end)

Começando pelo diretorio do Back-end no terminal:

Digite o comando para instalar as dependencias:
```
yarn
```

Após, no mesmo diretorio pelo terminal:
```
node index.js
```

Pronto, o servidor node está rodando.


Agora, abra uma outra instancia do terminal e vá ao diretorio raiz do front-end.

usar o mesmo comando para instalar as dependencias:
```
yarn
```

e enfim, rodar o comando para inicializar o vite:

```
yarn dev
```

pronto, agora o vite irá disponibilizar um link com a aplicação pronta para ser utilizada, provavelmente sob o endereço (http://localhost:5173/)
24 changes: 24 additions & 0 deletions back-end/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
![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;
145 changes: 145 additions & 0 deletions back-end/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
const express = require("express");
const cors = require("cors");

const server = express();

server.use(cors());
server.use(express.json());
let carros = [
{
id: 1,
nome: "Gol",
marca: "Volkswagen",
anoDeFabricacao: 2016,
desc: "",
imagem:
"https://images.kavak.services/images/25650/volkswagen-gol-hatch-back-cl2016-frontal-lateral-piloto-cercana-1604970955144.jpg",
proprietario: {
nome: "Paulo",
email: "[email protected]",
telefone: "2515144151",
},
},
{
id: 2,
nome: "Onix",
marca: "Chevrolet",
anoDeFabricacao: 2018,
desc: "",
imagem:
"http://www.listadecarros.com/wp-content/uploads/2016/02/Chevrolet-Onix-2016-6.jpg",
proprietario: {
nome: "Carlos",
email: "[email protected]",
telefone: "2515144151",
},
},
{
id: 3,
nome: "Mobi",
marca: "Fiat",
anoDeFabricacao: 2022,
desc: "",
imagem: "https://i.ytimg.com/vi/AHdB26vhiuk/maxresdefault.jpg",
proprietario: {
nome: "João",
email: "[email protected]",
telefone: "2515144151",
},
},
{
id: 4,
nome: "S10",
marca: "Chevrolet",
anoDeFabricacao: 2015,
desc: "",
imagem:
"https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Fs1.cdn.autoevolution.com%2Fimages%2Fnews%2Fgallery%2F2021-chevrolet-s10-pickup-truck-revealed-its-the-colorados-brazilian-brother_3.jpg&f=1&nofb=1&ipt=fa7e1a7d2246196942085764002b1a22e96bd71a7da41d22e8f8fc4114c0ffbe&ipo=images",
proprietario: {
nome: "Carlos",
email: "[email protected]",
telefone: "2515144151",
},
},
];

server.get("/carros", (req, res) => {
return res.json(carros);
});

server.get("/carros/:index", (req, res) => {
const { index } = req.params;
const carro = carros.find((carro) => carro.id === +index);
if (!!carro) {
return res.json(carro);
} else {
return res.status(404).json("Carro não encontrado.");
}
});

server.post("/carros", (req, res) => {
const carroInput = req.body;
const carro = {
id: carros.length + 1,
nome: carroInput.nome,
marca: carroInput.marca,
imagem: carroInput.imagem,
anoDeFabricacao: carroInput.anoDeFabricacao,
desc: carroInput.desc,
proprietario: carroInput.proprietario,
};

carros.push(carro);
return res.json(carro);
});

server.put("/carro/:index", (req, res) => {
const { index } = req.params;
const carroInput = req.body;

const carroExiste = carros.some((carro) => carro.id === +index);

if (!carroExiste) return res.status(404).json("Carro não encontrado.");
const carro = carros.find((carro) => carro.id === +index);

console.log(carro);

carro.nome = !!carroInput?.nome ? carroInput?.nome : carro.nome;
carro.anoDeFabricacao = carroInput?.anoDeFabricacao
? carroInput?.anoDeFabricacao
: carro.anoDeFabricacao;
carro.marca = carroInput?.marca || carro.marca;
carro.imagem = carroInput?.imagem || carro.imagem;
carro.proprietario.nome =
carroInput?.proprietario?.nome || carro.proprietario.nome;
carro.proprietario.email =
carroInput?.proprietario?.email || carro.proprietario.email;
carro.proprietario.telefone =
carroInput?.proprietario?.telefone || carro.proprietario.telefone;

const carroEdicao = {
id: +index,
nome: carroInput?.nome,
marca: carroInput?.marca,
imagem: carroInput?.imagem,
anoDeFabricacao: carroInput?.anoDeFabricacao,
desc: carroInput?.desc,
proprietario: carroInput?.proprietario,
};

carros.splice(index - 1, 1, carro);
return res.json(carro);
});

server.delete("/carro/:index", (req, res) => {
const { index } = req.params;
// const carroDeletado = carros.splice(index - 1, 1);
if (carros.some((carro) => carro.id === +index)) {
carros = carros?.filter((carro) => carro?.id !== +index);
return res.json(`Carro com id: ${index} deletado!`);
} else {
return res.status(404).json("Carro não encontrado.");
}
});

server.listen(3000);
12 changes: 12 additions & 0 deletions back-end/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"name": "desafio-dev-junior-b2u",
"version": "1.0.0",
"main": "index.js",
"repository": "[email protected]:pvpmartins/desafio-dev-junior-b2u.git",
"author": "Paulo <[email protected]>",
"license": "MIT",
"dependencies": {
"cors": "^2.8.5",
"express": "^4.18.2"
}
}
Loading