Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
96 commits
Select commit Hold shift + click to select a range
1626548
feat: init project with mongodb
AiramToscano Feb 7, 2023
5c5fb40
Merge pull request #1 from AiramToscano/airamtoscano
AiramToscano Feb 7, 2023
b51e4bc
feat: init backend and lint
AiramToscano Feb 8, 2023
9923755
Merge pull request #2 from AiramToscano/airamtoscano
AiramToscano Feb 8, 2023
4ce3b48
Create eslint.yml
AiramToscano Feb 8, 2023
b93da2d
feat: github actions
AiramToscano Feb 8, 2023
bd429f2
Test pull request
AiramToscano Feb 8, 2023
ae202e3
Merge branch 'ormacarbon:main' into main
AiramToscano Feb 8, 2023
c0c2ea4
feat: modified folders
AiramToscano Feb 8, 2023
358895e
Test pull request
AiramToscano Feb 8, 2023
6305b9b
Merge pull request #3 from AiramToscano/airamtoscano
AiramToscano Feb 8, 2023
34ddb2a
Test pull request cli
AiramToscano Feb 8, 2023
e23d2b8
Test cli
AiramToscano Feb 8, 2023
48ad2ec
Create eslint2.yml
AiramToscano Feb 8, 2023
3bcdfd4
Test cli
AiramToscano Feb 8, 2023
babbc3d
Delete eslint2.yml
AiramToscano Feb 8, 2023
e6fefd2
Test cli
AiramToscano Feb 8, 2023
35f2be4
Update eslint.yml
AiramToscano Feb 8, 2023
3ec2e2f
Update eslint.yml
AiramToscano Feb 8, 2023
0c56983
Update eslint.yml
AiramToscano Feb 8, 2023
43e1539
Merge pull request #4 from AiramToscano/airamtoscano
AiramToscano Feb 8, 2023
8c68ddd
Update eslint.yml
AiramToscano Feb 8, 2023
ba9689d
feat: test cli
AiramToscano Feb 8, 2023
8a289c1
feat: test cli
AiramToscano Feb 8, 2023
73526ae
feat: test cli
AiramToscano Feb 8, 2023
85283ab
Merge branch 'main' into airamtoscano
AiramToscano Feb 8, 2023
d4d3de4
Merge pull request #5 from AiramToscano/airamtoscano
AiramToscano Feb 8, 2023
5f07e4f
Merge pull request #6 from AiramToscano/main
AiramToscano Feb 8, 2023
d1e278b
feat: cli
AiramToscano Feb 8, 2023
bf3a8ab
Merge pull request #7 from AiramToscano/main
AiramToscano Feb 8, 2023
b148dbc
Merge pull request #8 from AiramToscano/airamtoscano
AiramToscano Feb 8, 2023
902c5a0
Test cli
AiramToscano Feb 8, 2023
4235498
Test cli 2
AiramToscano Feb 8, 2023
5c0462b
fix: eslint and github actions
AiramToscano Feb 8, 2023
85174c8
fix: Eslint
AiramToscano Feb 8, 2023
245b4ea
Merge pull request #9 from AiramToscano/airamtoscano
AiramToscano Feb 8, 2023
cace1b3
feat: fix eslint?
AiramToscano Feb 8, 2023
96e1810
Fix: Eslint error
AiramToscano Feb 8, 2023
d867d04
feat: config model with connection mongodb
AiramToscano Feb 8, 2023
0e7e243
feat: install helmet
AiramToscano Feb 8, 2023
19f9d8e
feat: create rateLimit for api
AiramToscano Feb 8, 2023
d737485
feat: controllers beers
AiramToscano Feb 8, 2023
87ee478
feat: interfaces Iservices
AiramToscano Feb 8, 2023
9b4ecf8
feat: create middlewares
AiramToscano Feb 8, 2023
0564197
feat: create routes beers
AiramToscano Feb 8, 2023
9b68c17
feat: create services beers
AiramToscano Feb 8, 2023
9cf23fe
Fix: bugs app
AiramToscano Feb 8, 2023
4a62f28
feat: create readAll Controllers
AiramToscano Feb 9, 2023
cc0956b
feat: create readAll interfaces
AiramToscano Feb 9, 2023
d5b8ae0
feat: create interfaces Iservice
AiramToscano Feb 9, 2023
1679fc7
feat: create readAll model
AiramToscano Feb 9, 2023
c330684
feat: create readAll routes
AiramToscano Feb 9, 2023
c78d5d0
feat: create readAll service
AiramToscano Feb 9, 2023
f18bab6
feat: delete settings.json
AiramToscano Feb 9, 2023
d2fb9ea
feat: implement update Controllers
AiramToscano Feb 9, 2023
765644a
feat: implement update interface model
AiramToscano Feb 9, 2023
4a7217a
feat: implement update interfaces Iservices
AiramToscano Feb 9, 2023
d8931af
feat: implement update MongoModel
AiramToscano Feb 9, 2023
76f50a9
feat: route update beers
AiramToscano Feb 9, 2023
ede6112
feat: implement beersService
AiramToscano Feb 9, 2023
80ad467
feat: implement delete beersControllers
AiramToscano Feb 9, 2023
e24a60c
feat: implement delete interfaces Imodel
AiramToscano Feb 9, 2023
2546148
feat: implement delete interfaces Iservice
AiramToscano Feb 9, 2023
8204169
feat: implement delete mongoModel
AiramToscano Feb 9, 2023
2bffdac
feat: route delete beer
AiramToscano Feb 9, 2023
a207e25
feat: implement delete Service
AiramToscano Feb 9, 2023
3238198
feat: implements swagger doc
AiramToscano Feb 9, 2023
d9bd3b7
Fix: error lint
AiramToscano Feb 9, 2023
2a96035
Test: create tests unit : model
AiramToscano Feb 9, 2023
ff671bb
Test: create tests unit : model
AiramToscano Feb 9, 2023
7f12bb6
fix: Eslint mocks
AiramToscano Feb 9, 2023
ecbbbcc
Tests: unit service
AiramToscano Feb 10, 2023
8b9daed
Tests: unit controllers
AiramToscano Feb 10, 2023
5de3459
Fix: doc swagger
AiramToscano Feb 10, 2023
7b68add
Fix: fix json obj controllers and middlewares
AiramToscano Feb 10, 2023
12c45ac
Feat: dockerFile backend and add backend docker-compose
AiramToscano Feb 10, 2023
dd385cb
feat: Modified route get, now with limit and skip
AiramToscano Feb 12, 2023
28bc154
feat: nyc
AiramToscano Feb 12, 2023
a58495b
feat: modified doc swagger
AiramToscano Feb 12, 2023
27e2e68
feat: create frontend
AiramToscano Feb 12, 2023
875f6f9
feat: create components buttons
AiramToscano Feb 13, 2023
0daa331
feat: create components FormEdit
AiramToscano Feb 13, 2023
94659a6
feat: interfaces Ibuttons
AiramToscano Feb 13, 2023
9e3a63b
feat: interfaces IFormEdit
AiramToscano Feb 13, 2023
3aaf0e4
feat: api update and delete and create
AiramToscano Feb 13, 2023
2562808
feat: finish frontend
AiramToscano Feb 13, 2023
7e3d5da
feat: add readme
AiramToscano Feb 14, 2023
9e9c2c1
feat: add gif
AiramToscano Feb 14, 2023
1f1f468
feat: add dockerfile frontend
AiramToscano Feb 14, 2023
1cbbfbd
feat: add frontend compose
AiramToscano Feb 14, 2023
f8c2831
feat: css modules
AiramToscano Feb 14, 2023
020250e
Modified: readme
AiramToscano Feb 14, 2023
e75e6a7
Merge pull request #10 from AiramToscano/airamtoscano
AiramToscano Feb 14, 2023
238da07
Update README.md
AiramToscano Feb 14, 2023
026bb01
Update README.md
AiramToscano Feb 14, 2023
ff81090
Update README.md
AiramToscano Feb 14, 2023
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
32 changes: 32 additions & 0 deletions .github/workflows/eslint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: Lint

on:
# Trigger the workflow on push or pull request,
# but only for the main branch
pull_request:
types: [opened, synchronize]

jobs:
run-linters:
name: Run linters
runs-on: ubuntu-latest

steps:
- name: Check out Git repository
uses: actions/checkout@v2

- name: Set up Node.js
uses: actions/setup-node@v1
with:
node-version: 12

- name: Install ESLint
run: |
npm install eslint@8.10.0
npm install @microsoft/eslint-formatter-sarif@2.1.7

- name: Run ESLint backend
run: |
cd app/backend
npm i
npm run lint
109 changes: 72 additions & 37 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,61 +1,96 @@
# **TESTE DE BACKEND**
# Desafio para o processo seletivo Orma Carbon

## SITUAÇÃO-PROBLEMA
Repositório destinado aos interessados em participar do processo seletivo da Orma Carbon

Você acabou de ser contratado para uma vaga de desenvolvedor backend de uma empresa que revende cervejas do mundo inteiro. O desenvolvedor anterior corrompeu completamente o banco de dados e a API anterior e sobrou apenas um arquivo .JSON com todas as informações do banco. Seu líder confiou a tarefa de recriar a API e o banco de dados a você.

Neste teste, você deverá criar uma API com endpoints a serem consumidos via REST e um banco de dados, utilizando os dados fornecidos no arquivo. ````db.json````.
## 🚀 Começando

---------------------------------------------------------------------
Antes de utilizar o projeto, é necessario ter Git, Docker/Docker-compose e npm/yarn instalado na máquina.

## REQUISITOS OBRIGATÓRIOS:

- Seja original, projetos suspeitos de serem copiados serão descartados.
- Queremos ver o seu código, e não o de outros.
- Criar coleção no Postman (seu teste será testado por aqui).

## GIT
## 📃 Sobre
<p>
Estruturar uma aplicação backend, dockerizada, cujo objetivo é salvar o banco de dados e criar uma nova API com dados do json, e também realizar alguns desafios propostos pela empresa Orma Carbon.
</p>

- Faça um fork deste repositório.
- Crie uma branch para codar as suas features.
- Faça um pull-request quando o teste for finalizado.

##### **NOTA: Será avaliado também se o nome da branch, títulos de commit, push e comentários possuem boa legibilidade.**
## 🛠️ Ferramentas

-----------------------------------------------------
## - Front-End:
- React
- Typescript
- Vite
- React Router Dom
- React Hooks
- Css modules
- Axios

## - Back-End:
- Node
- Typescript
- Express
- Cors
- Mongodb
- Swagger
- Eslint
- GitHub CI/CD
- Chai/Mocha
- mongoose
- Shell
- Migrate-mongo

## FRAMEWORK -
## ⚙️ Como executar

- Servidor: Express (Javascript/Typescript) *<u>**OU**</u>* Gin (Golang)
- Banco de dados: MongoDB, DynamoDB, MySQL, Postgres...
Será necessário que a porta 3000 e 3001 estejam disponíveis para a aplicação, Mongodb usará a porta 27017.

-----------------------------------------------------
1 - Clone o repositório em uma pasta de sua preferencia
```
git@github.com:AiramToscano/backend-test-two.git
```
2 - Suba o docker-compose, todas as depêndencias serão automaticamente instaladas
```
npm run compose:up // para subir a aplicação
npm run compose:down // para parar completamente a aplicação
```
3 - Após rodar o comando, aguarde um pouco que a aplicação irá ficar disponivel nas seguintes rotas:

## PROJETO
`- Front-End: http://localhost:3000`

- Api deve conter pelo menos 1 endpoint para cada operação crud (Create, Read, Update, Delete).
- Um endpoint para listagem de conteúdo.
- Banco de dados a escolha do dev.
`- Back-End: http://localhost:3001`

-------------------------------------------------------
<p> Caso algum container tiver com o status unhealty, você poderá acessar a aplicação localmente, instalando as dependências `npm install`, tanto no <code>/app/frontend</code> quanto no <code>/app/backend</code></p>

## REQUISITOS DIFERENCIAIS:
<p>E logo após a instalação das dependências, rode os comandos <code>npm run dev</code> no Frontend e o comando <code>npm run dev</code> no Backend</p>

- Seguir os princípios de SOLID.
- Fazer o teste em GoLang.
- Codar um código performático.
- Utilizar inglês no projeto todo.
- Utilizar Injeção de dependências.
- Criar um frontend que consuma a API
- Fazer deploy do mesmo (heroku, aws, google cloud ou outro da preferência).
<p>Caso queria rodar localmente, irá precisar ter o mongoDB instalado na máquina ou em um container docker, com o a url `mongodb://localhost:27017/testtwo` </p>

# Back-End

## 1 - Rotas dos estoques da Cerveja - Beers

---
Para testar as rotas basta subir o backend, as rotas estão documentadas no swagger.

## ENTREGA
- `http://localhost:3001/api-docs/` - Documentada pelo Swagger.

- Faça um pull request e nomeie-o como no ex.: Teste de (Seu nome aqui).
- Envie um email para schmidt@repenso.eco e kevin@repenso.eco com o link do pull request, do deploy (tanto do front quanto do back se feito), e anexe a coleção do postman.
- Assim que avaliarmos seu teste, enviaremos uma devolutiva de sucesso ou falha, e caso seja aprovado, um link para agendar sua entrevista técnica.

### ⚙️ Executando os testes

Para essa aplicação back-end, foi feito testes unitarios, cobrindo 100% da aplicação.

- `npm run test:dev` - Para rodar os testes unitários.

- `npm run test:coverage` - Para rodar os testes junto com a cobertura da aplicação.

Testes back-end com quase 100% de cobertura.



# Front-End

![recipes](https://github.com/AiramToscano/backend-test-two/blob/main/app/gif/testProject.gif)


# 🎁 Expressões de gratidão

- Gostaria de agradecer a Orma Carbon por esse desafio, aprendi muito com esse projeto, a cada um novo desafio se torna um novo aprendizado.
2 changes: 2 additions & 0 deletions app/backend/.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
APP_PORT=3001
MONGO_URI=mongodb://localhost:27017/testtwo
29 changes: 29 additions & 0 deletions app/backend/.eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
module.exports = {
parser: '@typescript-eslint/parser',
parserOptions: {
project: 'tsconfig.json',
tsconfigRootDir: __dirname,
sourceType: 'module',
},
plugins: ['@typescript-eslint/eslint-plugin'],
extends: [
'plugin:@typescript-eslint/recommended',
'airbnb-base',
'plugin:editorconfig/noconflict',
'plugin:mocha/recommended',
'airbnb-typescript/base'
],
root: true,
env: {
node: true,
jest: true,
},
ignorePatterns: ['.eslintrc.js'],
rules: {
'@typescript-eslint/interface-name-prefix': 'off',
'@typescript-eslint/explicit-function-return-type': 'off',
'@typescript-eslint/explicit-module-boundary-types': 'off',
'@typescript-eslint/no-explicit-any': 'off',
"no-console": "off",
},
};
23 changes: 23 additions & 0 deletions app/backend/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules


# testing
/coverage
/.nyc_output

# production
/build

# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local

npm-debug.log*
yarn-debug.log*
yarn-error.log*
1 change: 1 addition & 0 deletions app/backend/.nyc_output/processinfo/index.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"processes":{"17b53a63-5be5-4edb-98f2-7268be738a4b":{"parent":null,"children":["1b21971c-4645-4137-a8ee-545f8d58ed3c"]},"1b21971c-4645-4137-a8ee-545f8d58ed3c":{"parent":"17b53a63-5be5-4edb-98f2-7268be738a4b","children":[]}},"files":{"/home/toscano/backend-test-two/backend-test-two/app/backend/src/controllers/BeersControllers.ts":["1b21971c-4645-4137-a8ee-545f8d58ed3c"],"/home/toscano/backend-test-two/backend-test-two/app/backend/src/models/BeersModel.ts":["1b21971c-4645-4137-a8ee-545f8d58ed3c"],"/home/toscano/backend-test-two/backend-test-two/app/backend/src/models/MongoModel.ts":["1b21971c-4645-4137-a8ee-545f8d58ed3c"],"/home/toscano/backend-test-two/backend-test-two/app/backend/src/services/BeersService.ts":["1b21971c-4645-4137-a8ee-545f8d58ed3c"],"/home/toscano/backend-test-two/backend-test-two/app/backend/src/tests/mocks/BeerMock.ts":["1b21971c-4645-4137-a8ee-545f8d58ed3c"]},"externalIds":{}}
13 changes: 13 additions & 0 deletions app/backend/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
FROM node:16-alpine

WORKDIR /app-backend

COPY package.json /app-backend

RUN ["npm", "i"]

COPY . /app-backend

EXPOSE 3001

CMD ["npm" , "run", "dev"]
37 changes: 37 additions & 0 deletions app/backend/migrations/migrate-mongo-config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
// In this file you can configure migrate-mongo
require('dotenv').config()

const config = {
mongodb: {
// TODO Change (or review) the url to your MongoDB:
url: process.env.MONGO_URI || 'mongodb://0.0.0.0:27017/testtwo',

// TODO Change this to your database name:
databaseName: "testtwo",

options: {
useNewUrlParser: true, // removes a deprecation warning when connecting
useUnifiedTopology: true, // removes a deprecating warning when connecting
// connectTimeoutMS: 3600000, // increase connection timeout to 1 hour
// socketTimeoutMS: 3600000, // increase socket timeout to 1 hour
}
},

// The migrations dir, can be an relative or absolute path. Only edit this when really necessary.
migrationsDir: "migrations",

// The mongodb collection where the applied changes are stored. Only edit this when really necessary.
changelogCollectionName: "changelog",

// The file extension to create migrations and search for in migration dir
migrationFileExtension: ".js",

// Enable the algorithm to create a checksum of the file contents and use that in the comparison to determine
// if the file should be run. Requires that scripts are coded to be run multiple times.
useFileHash: false,

// Don't change this, unless you know what you're doing
moduleSystem: 'commonjs',
};

module.exports = config;
11 changes: 11 additions & 0 deletions app/backend/migrations/migrations/db.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
const config = require('./db.json');

module.exports = {
up(db, callback) {
return db.collection('beers').insertMany(config, {$set: {blacklisted: true}}, callback);
},

down(db, _callback) {
return db.dropDatabase();
}
};
File renamed without changes.
Loading