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 - fernandohpassos@gmail.com #28

Open
wants to merge 25 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
25 changes: 25 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Config environment

POSTGRES_PASSWORD="mypasswd"
POSTGRES_USER="myuser"
POSTGRES_DB="vehicles"

BACKEND_PORT=3000

FRONTEND_HOST="frontend"
BACKEND_HOST="backend"

BACKEND_DOMAIN_NAME="api.example.com"
FRONTEND_DOMAIN_NAME="www.example.com"

BACKEND_URL="http://${BACKEND_HOST}:${BACKEND_PORT}"
DATABASE_HOST="postgres"

SECRET="secret123"

DATABASE_URL="postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${DATABASE_HOST}:5432/${POSTGRES_DB}?schema=public"

ENV="production"

VITE_BACKEND_HOST="${BACKEND_HOST}"
VITE_SECRET="${SECRET}"
32 changes: 32 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*

node_modules
dist
dist-ssr
*.local

# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

.env
.env.development

frontend/Caddyfile
frontend/config.ts

.VSCodeCounter/
159 changes: 135 additions & 24 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,24 +1,135 @@
![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

[O projeto](#o-projeto) |
[Tecnologias utilizadas](#tecnologias-utilizadas) |
[Pré requisitos](#pre-requisitos) |
[Download e instalação](#download-e-instalação) |
[Melhorias](#melhorias) |
[Documentação](#documentação)

## O projeto
Sistema fullstack para cadastro de anúncios de veículos.

## Tecnologias utilizadas
* [NodeJS](https://nodejs.org)
* [Typescript](https://www.typescriptlang.org/)
* [React](https://reactjs.org/)
* [Prisma](https://prisma.io)
* [Caddy](https://caddyserver.com)
* [Postgresql](https://postgresql.org)
* [Docker](https://docker.com)


## Pré requisitos
Para rodar este projeto é necessário:
* Docker e docker-compose instalados.
* Para ajuda na instalação, vá até [Docker](https://docker.io).
* Node.js e npm instalados.
* Para ajuda na instalação, vá até [Nodejs](https://nodejs.org).
* Git instalado.


## Download e instalação

Clone este repositório:

```sh
# clonando o repositório
git clone https://github.com/passoz/desafio-dev-junior-b2u.git
```

Entre no diretório:

```sh
# entrando no repositório
cd desafio-dev-junior-b2u
```
Faça uma cópia do arquivo de exemplo .env.example para .env e altere as variáveis abaixo para personalização. O arquivo .env.example já vem pré-configurado para o funcionamento básico do sistema.

### Backend
Altere de:
```
BACKEND_HOST=
```
Para:
```
BACKEND_HOST=<your-backend-hosting>
```
Exemplo:
```
BACKEND_HOST=api.example.com
```
Se estiver utilizando localmente, utilize o endereço IP do seu computador como no exemplo:
```
BACKEND_HOST=192.168.1.200
```
Ou como "localhost":
```
BACKEND_HOST=localhost
```
### Frontend
Altere de:
```
FRONTEND_HOST=
```
Para:
```
FRONTEND_HOST=<your-frontend-hosting>
```
Exemplo:
```
FRONTEND_HOST=www.example.com
```

Se você possuir um endereço IP fixo válido e um domínio próprio, aponte o DNS para a o local da instalação e automaticamente será validado um certificado SSL para a URL do frontend.

### Banco de dados
E também de:
```
POSTGRES_PASSWORD=
POSTGRES_USER=
```
Para:
```
POSTGRES_PASSWORD=<your-password>
POSTGRES_USER=<your-username>
```
Exemplo:
```
POSTGRES_PASSWORD="minhasenha"
POSTGRES_USER="meuusuario"
```

Inicie a aplicação:

```sh
# iniciando aplicação
npm start
```

Para parar a aplicação execute:

```sh
# iniciando aplicação
npm stop
```

A aplicação estará disponível para acesso HTTP na porta 80 (Redirecionado para a porta 443 SSL) e o backend estará respondendo na porta 3000.

## Melhorias
Pontos de melhorias para as próximas versôes:
* Padronização de mensagens de tratamento de erros.
* API Gateway para o Backend e autenticação/integração com Keycloak.
* Balanceamento de carga para o Frontend e autenticação/integração com Keycloak.
* Aplicar técnicas de cache local e remoto com Redis.
* CI/CD através do Github Actions para geração dos artefatos e deploy.
* Deploy dos artefatos para o Docker Registry.
* Manifestos para Kubernetes e Helm charts.
* Monitoramento de perfermance e tráfego (Observabilidade).
* Cobertura de testes unitários e de integração.
* Documentação.


## Documentação

[Clique aqui e acesse a documentação](https://passoz.github.io/desafio-dev-junior-b2u/)
24 changes: 24 additions & 0 deletions README.old.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;
9 changes: 9 additions & 0 deletions backend/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
FROM node:16-alpine
WORKDIR /app
COPY . .
RUN npm install
RUN npm run build
ENV NODE_ENV production
RUN npx prisma generate
EXPOSE 3000
CMD npx prisma db push && node ./dist/index.js
34 changes: 34 additions & 0 deletions backend/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
{
"name": "backend",
"version": "1.0.0",
"description": "",
"main": "dist/index.js",
"scripts": {
"build": "npx tsc",
"dev": "concurrently \"npx tsc --watch\" \"nodemon -q dist/index.js\"",
"start": "node dist/index.js",
"test": "echo \"Error: no test specified\" && exit 1",
"dev-server": "",
"swagger-autogen": "node ./swagger/swagger-autogen"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"@prisma/client": "4.9.0",
"cors": "^2.8.5",
"dotenv": "^16.0.3",
"express": "^4.18.2",
"jsonwebtoken": "^9.0.0"
},
"devDependencies": {
"@types/cors": "^2.8.13",
"@types/express": "^4.17.15",
"@types/jsonwebtoken": "^9.0.1",
"@types/node": "^18.11.18",
"concurrently": "^7.6.0",
"nodemon": "^2.0.20",
"prisma": "^4.9.0",
"typescript": "^4.9.4"
}
}
32 changes: 32 additions & 0 deletions backend/prisma/schema.prisma
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
generator client {
provider = "prisma-client-js"
}

datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}

model User {
id String @id @default(uuid())
createdAt DateTime @default(now())
updatedAt DateTime @default(now())
fullname String
email String @unique
password String
phone String
Vehicles Vehicle[]
}

model Vehicle {
id String @id @default(uuid())
createdAt DateTime @default(now())
updatedAt DateTime @default(now())
name String
brand String
price Float
year Int
description String
User User? @relation(fields: [userId], references: [id])
userId String?
}
Loading