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-bitocointoyou finalizado. #26

Open
wants to merge 11 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
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
node_modules
dist
.vscode
yarn-error.log
30 changes: 30 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "attach",
"name": "Docker: Attach to Node",
"remoteRoot": "/usr/src/bitcointoyou",
"port": 9222,
"sourceMapPathOverrides": {
"/usr/src/bitcointoyou/*": "${workspaceRoot}/*"
}
},
{
"type": "node",
"request": "launch",
"name": "Launch Program",
"skipFiles": [
"<node_internals>/**"
],
"program": "${file}",
"outFiles": [
"${workspaceFolder}/**/*.js"
]
}
]
}
67 changes: 67 additions & 0 deletions TODO.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
# Aplicação Node e React - Bitcointoyou

API HTTP em Node.js com TypeScript, Express e Docker e TypeORM. Tendo como front o React com o Sass.

## Guia de desenvolvimento

Prerequisites:
- caso não utilize docker é recomendado ter uma versao do node mais atual.
- `yarn` ou `npm` (para gerenciamento de dependências e execução de scripts)
- `docker` e `docker-compose` (para executar o servidor, banco de dados localmente de forma isolada e reproduzível)

### Backend:

Em primeiro lugar, entrar no diretorio ou code base onde está a aplicação backend:
```sh
cd backend
```
Em segundo se faz necessário preencher as variáveis de ambiente, lembrando que a porta usada e mapeada pelo docker é a 8086 da aplicação e a do banco de dados é a 5432, e no DB_HOST sera o nome do serviço do docker é ```db```, bom o resto das variáveis fica a seu critério:
```
PORT=
DB_HOST=
DB_PORT=
DB_USER=
DB_PASSWORD=
DB_NAME=
POSTGRES_USER=
POSTGRES_PASSWORD=
POSTGRES_DB=
```
Em seguida é so subir o container docker:

```
sudo docker compose up
```

Sem o docker:
```
npm i
npm run start
yarn start
```

### Frontend

Entrando no diretorio específico:

```sh
cd frontend
```
Depois instalar as dependencias com ```yarn``` ou ```npm```:

```
npm install
yarn
```
Agora é so rodar o script de inicialização que o frontend estará disponível em ```http://locahost:8086```

```
npm run dev
yarn dev
```
Qualquer duvida só me chamar pelo linkedin
```
https://www.linkedin.com/in/gabriel-rodrigues-aaa352207/
```


9 changes: 9 additions & 0 deletions backend/.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
PORT=8086
DB_HOST=db
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=postgres
DB_NAME=bitcointoyou
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_DB=bitcointoyou
9 changes: 9 additions & 0 deletions backend/.env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
PORT=
DB_HOST=
DB_PORT=
DB_USER=
DB_PASSWORD=
DB_NAME=
POSTGRES_USER=
POSTGRES_PASSWORD=
POSTGRES_DB=
3 changes: 3 additions & 0 deletions backend/.eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
node_modules
dist
jest.config.js
24 changes: 24 additions & 0 deletions backend/.eslintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
{
"env": {
"node": true,
"es2021": true,
"jest": true
},
"extends": ["standard-with-typescript"],
"overrides": [],
"parserOptions": {
"project": ["./backend/tsconfig.json"]
},
"rules": {
"@typescript-eslint/consistent-type-definitions": "off",
"@typescript-eslint/strict-boolean-expressions": "off",
"@typescript-eslint/no-extraneous-class": "off",
"@typescript-eslint/indent": "off",
"@typescript-eslint/return-await": "off",
"@typescript-eslint/naming-convention": "off",
"@typescript-eslint/no-misused-promises": "off",
"@typescript-eslint/prefer-nullish-coalescing": "off",
"@typescript-eslint/await-thenable":"off"
}
}

3 changes: 3 additions & 0 deletions backend/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
node_modules
dist
.env
15 changes: 15 additions & 0 deletions backend/.vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "attach",
"name": "Docker: Attach to Node",
"remoteRoot": "/usr/src/bitcointoyou",
"port": 9222
},
]
}
4 changes: 4 additions & 0 deletions backend/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
FROM node:16
WORKDIR /usr/src/bitcointoyou
COPY ./package.json .
RUN npm install --only=prod
31 changes: 31 additions & 0 deletions backend/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
version: '3.1'
services:
db:
image: postgres:14.6
env_file:
- .env
ports:
- 5432:5432
# create a volumes to persist data
volumes:
- pg_data:/var/lib/postgres/data
app:
build: .
container_name: bitcointoyou_app
restart: always
command: npm run watch
volumes:
- ./src:/usr/src/bitcointoyou/src
- ./dist:/usr/src/bitcointoyou/dist
ports:
- 8086:8086
- 9222:9222
env_file:
- .env
depends_on:
- db
volumes:
pg_data:



43 changes: 43 additions & 0 deletions backend/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
{
"name": "backend",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "jest --passWithNoTests --silent --noStackTrace",
"test:staged": "npm test -- --findRelatedTests",
"test:coverage": "npm test -- --coverage",
"test:unit": "npm test -- --watch -c jest-unit-config.js",
"test:integration": "npm test -- --watch -c jest-integration-config.js",
"test:verbose": "jest --passWithNoTests --runInBand",
"build": "rimraf dist && tsc -p tsconfig-build.json",
"start": "node dist/main/server.js",
"watch": "node --inspect=0.0.0.0:9222 --nolazy dist/main/server.js",
"dev": "sucrase-node src/main/server.ts",
"up": "sudo docker compose up",
"down": "sudo docker compose down"
},
"license": "MIT",
"dependencies": {
"cors": "^2.8.5",
"dotenv": "^16.0.3",
"express": "^4.18.2",
"git-commit-msg-linter": "^4.5.0",
"pg": "^8.8.0",
"reflect-metadata": "^0.1.13",
"typeorm": "^0.3.10",
"validator": "^13.7.0"
},
"devDependencies": {
"@types/cors": "^2.8.13",
"@types/express": "^4.17.15",
"@types/node": "^18.11.18",
"@typescript-eslint/eslint-plugin": "^5.0.0",
"eslint": "^8.0.1",
"eslint-config-standard-with-typescript": "^31.0.0",
"eslint-plugin-import": "^2.25.2",
"eslint-plugin-n": "^15.0.0",
"eslint-plugin-promise": "^6.0.0",
"prettier": "^2.8.3",
"typescript": "*"
}
}
5 changes: 5 additions & 0 deletions backend/src/data/protocols/car/add-car-repository.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { AddCarParams } from '../../../domain/use-cases/car/add-car'

export interface AddCarRepository {
add: (carData: AddCarParams) => Promise<void>
}
3 changes: 3 additions & 0 deletions backend/src/data/protocols/car/delete-by-id-repository.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export interface DeleteCarByIdRepository {
deleteById: (id: string) => Promise<void>
}
5 changes: 5 additions & 0 deletions backend/src/data/protocols/car/load-car-by-id-repository.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { CarModel } from '../../../domain/models/car'

export interface LoadCarByIdRepository {
loadById: (id: string) => Promise<CarModel>
}
5 changes: 5 additions & 0 deletions backend/src/data/protocols/car/load-cars-repository.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { CarModel } from '../../../domain/models/car'

export interface LoadCarsRepository {
loadAll: () => Promise<CarModel[]>
}
5 changes: 5 additions & 0 deletions backend/src/data/protocols/car/update-car-by-id-repository.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { CarData, OwnerData } from '../../../domain/use-cases/car/update-car-by-id'

export interface UpdateCarByIdRepository {
updateById: (id: string, car: CarData, owner: OwnerData, owner_id: string) => Promise<void>
}
6 changes: 6 additions & 0 deletions backend/src/data/protocols/owner/add-owner-repository.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import { AddOwnerParams } from '../../../domain/use-cases/owner/add-owner'
import { OwnerModel } from '../../../domain/models/owner'

export interface AddOwnerRepository {
add: (addOwnerParams: AddOwnerParams) => Promise<OwnerModel>
}
5 changes: 5 additions & 0 deletions backend/src/data/protocols/owner/load-owner-by-email.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { OwnerModel } from '../../../domain/models/owner'

export interface LoadOwnerByEmailRepository {
loadByEmail: (email: string) => Promise<OwnerModel>
}
14 changes: 14 additions & 0 deletions backend/src/data/use-cases/car/add-car/db-add-car.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { AddCarRepository } from '../../../../data/protocols/car/add-car-repository'
import { AddCar, AddCarParams } from '../../../../domain/use-cases/car/add-car'

export class DbAddCar implements AddCar {
private readonly addCarRepository: AddCarRepository

constructor (addCarRepository: AddCarRepository) {
this.addCarRepository = addCarRepository
}

async add (ownerData: AddCarParams): Promise<void> {
await this.addCarRepository.add(ownerData)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { DeleteCarByIdRepository } from '../../../../data/protocols/car/delete-by-id-repository'
import { DeleteCarById } from '../../../../domain/use-cases/car/delete-car-by-id'

export class DbDeleteCarById implements DeleteCarById {
private readonly deleteCarByIdRepository: DeleteCarByIdRepository

constructor (deleteCarByIdRepository: DeleteCarByIdRepository) {
this.deleteCarByIdRepository = deleteCarByIdRepository
}

async deleteById (id: string): Promise<void> {
await this.deleteCarByIdRepository.deleteById(id)
}
}
16 changes: 16 additions & 0 deletions backend/src/data/use-cases/car/load-car-by-id/db-load-car-by-id.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { LoadCarByIdRepository } from '../../../../data/protocols/car/load-car-by-id-repository'
import { CarModel } from '../../../../domain/models/car'
import { LoadCarById } from '../../../../domain/use-cases/car/load-car-by-id'

export class DbLoadCarById implements LoadCarById {
private readonly loadCarByIdRepository: LoadCarByIdRepository

constructor (loadCarByIdRepository: LoadCarByIdRepository) {
this.loadCarByIdRepository = loadCarByIdRepository
}

async loadCarById (id: string): Promise<CarModel> {
const car = await this.loadCarByIdRepository.loadById(id)
return car
}
}
16 changes: 16 additions & 0 deletions backend/src/data/use-cases/car/load-cars/db-load-cars.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { LoadCarsRepository } from '../../../../data/protocols/car/load-cars-repository'
import { CarModel } from '../../../../domain/models/car'
import { LoadCars } from '../../../../domain/use-cases/car/load-cars'

export class DbLoadCars implements LoadCars {
private readonly loadCarsRepository: LoadCarsRepository

constructor (loadCarsRepository: LoadCarsRepository) {
this.loadCarsRepository = loadCarsRepository
}

async loadAll (): Promise<CarModel[]> {
const cars = await this.loadCarsRepository.loadAll()
return cars
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { UpdateCarByIdRepository } from '../../../../data/protocols/car/update-car-by-id-repository'
import { CarData, OwnerData, UpdateCarById } from '../../../../domain/use-cases/car/update-car-by-id'

export class DbUpdateCarById implements UpdateCarById {
private readonly updateCarByIdRepository: UpdateCarByIdRepository

constructor (updateCarByIdRepository: UpdateCarByIdRepository) {
this.updateCarByIdRepository = updateCarByIdRepository
}

async updateById (
id: string,
car: CarData,
owner: OwnerData,
onwer_id: string
): Promise<void> {
await this.updateCarByIdRepository.updateById(id, car, owner, onwer_id)
}
}
Loading