From fd51fc892ac42101ea8a84758103c2a84d5b59d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Le=C3=A3o?= Date: Wed, 31 Aug 2022 23:33:42 -0300 Subject: [PATCH 1/4] =?UTF-8?q?Exerc=C3=ADcios=20Servi=C3=A7o=20Backend?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modulo4/servicos-backend/.gitignore | 4 +++ modulo4/servicos-backend/package.json | 29 +++++++++++++++ modulo4/servicos-backend/src/app.ts | 9 +++++ .../servicos-backend/src/data/connection.ts | 16 +++++++++ .../src/data/insertAddressDB.ts | 18 ++++++++++ .../src/endpoints/insertAddress.ts | 36 +++++++++++++++++++ modulo4/servicos-backend/src/index.ts | 14 ++++++++ .../src/services/getAdressInfo.ts | 21 +++++++++++ modulo4/servicos-backend/src/types/types.ts | 6 ++++ modulo4/servicos-backend/tsconfig.json | 14 ++++++++ 10 files changed, 167 insertions(+) create mode 100644 modulo4/servicos-backend/.gitignore create mode 100644 modulo4/servicos-backend/package.json create mode 100644 modulo4/servicos-backend/src/app.ts create mode 100644 modulo4/servicos-backend/src/data/connection.ts create mode 100644 modulo4/servicos-backend/src/data/insertAddressDB.ts create mode 100644 modulo4/servicos-backend/src/endpoints/insertAddress.ts create mode 100644 modulo4/servicos-backend/src/index.ts create mode 100644 modulo4/servicos-backend/src/services/getAdressInfo.ts create mode 100644 modulo4/servicos-backend/src/types/types.ts create mode 100644 modulo4/servicos-backend/tsconfig.json diff --git a/modulo4/servicos-backend/.gitignore b/modulo4/servicos-backend/.gitignore new file mode 100644 index 0000000..0a19ff0 --- /dev/null +++ b/modulo4/servicos-backend/.gitignore @@ -0,0 +1,4 @@ +node_modules +build +.env +package-lock.json \ No newline at end of file diff --git a/modulo4/servicos-backend/package.json b/modulo4/servicos-backend/package.json new file mode 100644 index 0000000..c85e683 --- /dev/null +++ b/modulo4/servicos-backend/package.json @@ -0,0 +1,29 @@ +{ + "name": "servicos-backend", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "dev": "ts-node-dev ./src/index.ts", + "start": "tsc && node ./build/index.js", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "Pablo Leão", + "license": "ISC", + "devDependencies": { + "@types/cors": "^2.8.12", + "@types/express": "^4.17.13", + "ts-node-dev": "^2.0.0", + "typescript": "^4.8.2" + }, + "dependencies": { + "@types/knex": "^0.16.1", + "axios": "^0.27.2", + "cors": "^2.8.5", + "dotenv": "^16.0.2", + "express": "^4.18.1", + "knex": "^2.2.0", + "mysql": "^2.18.1" + } +} diff --git a/modulo4/servicos-backend/src/app.ts b/modulo4/servicos-backend/src/app.ts new file mode 100644 index 0000000..9dc3edf --- /dev/null +++ b/modulo4/servicos-backend/src/app.ts @@ -0,0 +1,9 @@ +import express, { Express } from 'express'; +import cors from 'cors'; + +const app: Express = express(); + +app.use(express.json()); +app.use(cors()); + +export default app; \ No newline at end of file diff --git a/modulo4/servicos-backend/src/data/connection.ts b/modulo4/servicos-backend/src/data/connection.ts new file mode 100644 index 0000000..eec9370 --- /dev/null +++ b/modulo4/servicos-backend/src/data/connection.ts @@ -0,0 +1,16 @@ +import dotenv from "dotenv"; +import knex from "knex"; + +dotenv.config(); + +export const connection = knex({ + client: "mysql", + connection: { + host: process.env.DB_HOST, + port: 3306, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_SCHEMA, + multipleStatements: true + } +}); \ No newline at end of file diff --git a/modulo4/servicos-backend/src/data/insertAddressDB.ts b/modulo4/servicos-backend/src/data/insertAddressDB.ts new file mode 100644 index 0000000..b0842f7 --- /dev/null +++ b/modulo4/servicos-backend/src/data/insertAddressDB.ts @@ -0,0 +1,18 @@ +import { Address } from "../types/types"; +import { connection } from "./connection"; + +export const insertAddressDB = async (cep: string, numero: string, complemento: string | undefined, address: Address): Promise => { + const { logradouro, bairro, cidade, estado } = address; + const id_user: string = Date.now().toString(); + + await connection("exercicios_servicos_address").insert({ + id_user, + cep, + logradouro, + numero, + complemento, + bairro, + cidade, + estado + }); +} \ No newline at end of file diff --git a/modulo4/servicos-backend/src/endpoints/insertAddress.ts b/modulo4/servicos-backend/src/endpoints/insertAddress.ts new file mode 100644 index 0000000..fb5e819 --- /dev/null +++ b/modulo4/servicos-backend/src/endpoints/insertAddress.ts @@ -0,0 +1,36 @@ +import { Request, Response } from "express"; +import { insertAddressDB } from "../data/insertAddressDB"; +import { getAddressInfo } from "../services/getAdressInfo"; + +export const insertAddress = async (req: Request, res: Response) => { + try { + const { cep, numero, complemento } = req.body; + + if(!cep || !numero) { + throw new Error("Verifique os campos cep e numero. Os dados devem estar preenchidos."); + } + + const address = await getAddressInfo(cep); + + if (!address || address === undefined) { + throw new Error("CEP inválido."); + } + + await insertAddressDB(cep, numero, complemento, address); + + res.status(200).send("Endereço criado com sucesso!"); + + } catch (error: any) { + switch(error.message) { + case "Verifique os campos cep e numero. Os dados devem estar preenchidos.": + res.status(422).send({ message: error.message }); + break; + case "CEP inválido.": + res.status(404).send({ message: error.message }); + break; + default: + res.status(500).send(error.sqlMessage || { message: "Erro inesperado!" }); + break; + } + } +} \ No newline at end of file diff --git a/modulo4/servicos-backend/src/index.ts b/modulo4/servicos-backend/src/index.ts new file mode 100644 index 0000000..432af92 --- /dev/null +++ b/modulo4/servicos-backend/src/index.ts @@ -0,0 +1,14 @@ +import { AddressInfo } from 'net'; +import app from './app'; +import { insertAddress } from './endpoints/insertAddress'; + +app.post("/user", insertAddress); + +const server = app.listen(process.env.PORT || 3003, () => { + if (server) { + const address = server.address() as AddressInfo; + console.log(`Server is running in http://localhost:${address.port}`); + } else { + console.error(`Failure upon starting server.`); + } +}); \ No newline at end of file diff --git a/modulo4/servicos-backend/src/services/getAdressInfo.ts b/modulo4/servicos-backend/src/services/getAdressInfo.ts new file mode 100644 index 0000000..783e549 --- /dev/null +++ b/modulo4/servicos-backend/src/services/getAdressInfo.ts @@ -0,0 +1,21 @@ +import axios from 'axios'; +import { Address } from '../types/types'; + +export const getAddressInfo = async (cep: string): Promise
=> { + try { + + const result = await axios.get(`https://viacep.com.br/ws/${cep}/json/`); + const address: Address = { + logradouro: result.data.logradouro, + bairro: result.data.bairro, + cidade: result.data.localidade, + estado: result.data.uf + } + return address; + + } catch (error: any) { + + return undefined; + + } +} \ No newline at end of file diff --git a/modulo4/servicos-backend/src/types/types.ts b/modulo4/servicos-backend/src/types/types.ts new file mode 100644 index 0000000..0b5a53a --- /dev/null +++ b/modulo4/servicos-backend/src/types/types.ts @@ -0,0 +1,6 @@ +export type Address = { + logradouro: string, + bairro: string, + cidade: string, + estado: string +} \ No newline at end of file diff --git a/modulo4/servicos-backend/tsconfig.json b/modulo4/servicos-backend/tsconfig.json new file mode 100644 index 0000000..5f06550 --- /dev/null +++ b/modulo4/servicos-backend/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "target": "es6", + "module": "commonjs", + "sourceMap": true, + "outDir": "./build", + "rootDir": "./src", + "removeComments": true, + "strict": true, + "noImplicitAny": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true + } +} \ No newline at end of file From 806bd163b9616f9b275cd278e9fa4964c431687a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Le=C3=A3o?= Date: Thu, 1 Sep 2022 01:33:28 -0300 Subject: [PATCH 2/4] Requests.rest adicionado --- modulo4/servicos-backend/requests.rest | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 modulo4/servicos-backend/requests.rest diff --git a/modulo4/servicos-backend/requests.rest b/modulo4/servicos-backend/requests.rest new file mode 100644 index 0000000..7daa28c --- /dev/null +++ b/modulo4/servicos-backend/requests.rest @@ -0,0 +1,8 @@ +POST http://localhost:3003/user +Content-Type: application/json + +{ + "cep": "21331660", + "numero": "155", + "complemento": "Bloco 3 AP 302" +} \ No newline at end of file From 05721c3b0b605a641da1f84711c4b6207a868855 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Le=C3=A3o?= Date: Thu, 1 Sep 2022 02:03:54 -0300 Subject: [PATCH 3/4] package.json modificado Link Heroku criado --- modulo4/servicos-backend/package.json | 6 +++++- modulo4/servicos-backend/requests.rest | 8 ++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/modulo4/servicos-backend/package.json b/modulo4/servicos-backend/package.json index c85e683..e404bed 100644 --- a/modulo4/servicos-backend/package.json +++ b/modulo4/servicos-backend/package.json @@ -5,9 +5,13 @@ "main": "index.js", "scripts": { "dev": "ts-node-dev ./src/index.ts", - "start": "tsc && node ./build/index.js", + "start": "node ./build/index.js", + "postinstall": "tsc", "test": "echo \"Error: no test specified\" && exit 1" }, + "engines": { + "node": "v16.13.2" + }, "keywords": [], "author": "Pablo Leão", "license": "ISC", diff --git a/modulo4/servicos-backend/requests.rest b/modulo4/servicos-backend/requests.rest index 7daa28c..f1a9b72 100644 --- a/modulo4/servicos-backend/requests.rest +++ b/modulo4/servicos-backend/requests.rest @@ -1,8 +1,8 @@ -POST http://localhost:3003/user +POST https://servicos-backend-pablo.herokuapp.com/user Content-Type: application/json { - "cep": "21331660", - "numero": "155", - "complemento": "Bloco 3 AP 302" + "cep": "21030001", + "numero": "9020", + "complemento": "CIAGA" } \ No newline at end of file From 706afef7d4b84cdfaa3b013e26b3c6f5503b36ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Le=C3=A3o?= Date: Thu, 1 Sep 2022 23:52:39 -0300 Subject: [PATCH 4/4] Projeto LabECommerce Backend --- .../projeto-labecommerce-backend/.gitignore | 4 +++ .../projeto-labecommerce-backend/package.json | 28 +++++++++++++++++++ .../projeto-labecommerce-backend/src/app.ts | 9 ++++++ .../src/data/connection.ts | 16 +++++++++++ .../projeto-labecommerce-backend/src/index.ts | 13 +++++++++ .../tsconfig.json | 14 ++++++++++ 6 files changed, 84 insertions(+) create mode 100644 modulo4/projeto-labecommerce-backend/.gitignore create mode 100644 modulo4/projeto-labecommerce-backend/package.json create mode 100644 modulo4/projeto-labecommerce-backend/src/app.ts create mode 100644 modulo4/projeto-labecommerce-backend/src/data/connection.ts create mode 100644 modulo4/projeto-labecommerce-backend/src/index.ts create mode 100644 modulo4/projeto-labecommerce-backend/tsconfig.json diff --git a/modulo4/projeto-labecommerce-backend/.gitignore b/modulo4/projeto-labecommerce-backend/.gitignore new file mode 100644 index 0000000..0a19ff0 --- /dev/null +++ b/modulo4/projeto-labecommerce-backend/.gitignore @@ -0,0 +1,4 @@ +node_modules +build +.env +package-lock.json \ No newline at end of file diff --git a/modulo4/projeto-labecommerce-backend/package.json b/modulo4/projeto-labecommerce-backend/package.json new file mode 100644 index 0000000..2b92304 --- /dev/null +++ b/modulo4/projeto-labecommerce-backend/package.json @@ -0,0 +1,28 @@ +{ + "name": "projeto-labecommerce-backend", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "dev": "clear && ts-node-dev ./src/index.ts", + "start": "tsc && node ./build/index.js", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "Pablo Leão", + "license": "ISC", + "devDependencies": { + "@types/cors": "^2.8.12", + "@types/express": "^4.17.13", + "ts-node-dev": "^2.0.0", + "typescript": "^4.8.2" + }, + "dependencies": { + "@types/knex": "^0.16.1", + "cors": "^2.8.5", + "dotenv": "^16.0.2", + "express": "^4.18.1", + "knex": "^2.3.0", + "mysql": "^2.18.1" + } +} diff --git a/modulo4/projeto-labecommerce-backend/src/app.ts b/modulo4/projeto-labecommerce-backend/src/app.ts new file mode 100644 index 0000000..9dc3edf --- /dev/null +++ b/modulo4/projeto-labecommerce-backend/src/app.ts @@ -0,0 +1,9 @@ +import express, { Express } from 'express'; +import cors from 'cors'; + +const app: Express = express(); + +app.use(express.json()); +app.use(cors()); + +export default app; \ No newline at end of file diff --git a/modulo4/projeto-labecommerce-backend/src/data/connection.ts b/modulo4/projeto-labecommerce-backend/src/data/connection.ts new file mode 100644 index 0000000..eec9370 --- /dev/null +++ b/modulo4/projeto-labecommerce-backend/src/data/connection.ts @@ -0,0 +1,16 @@ +import dotenv from "dotenv"; +import knex from "knex"; + +dotenv.config(); + +export const connection = knex({ + client: "mysql", + connection: { + host: process.env.DB_HOST, + port: 3306, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_SCHEMA, + multipleStatements: true + } +}); \ No newline at end of file diff --git a/modulo4/projeto-labecommerce-backend/src/index.ts b/modulo4/projeto-labecommerce-backend/src/index.ts new file mode 100644 index 0000000..3d7307a --- /dev/null +++ b/modulo4/projeto-labecommerce-backend/src/index.ts @@ -0,0 +1,13 @@ +import { AddressInfo } from 'net'; +import app from './app'; + + + +const server = app.listen(process.env.PORT || 3003, () => { + if (server) { + const address = server.address() as AddressInfo; + console.log(`Server is running in http://localhost:${address.port}`); + } else { + console.error(`Failure upon starting server.`); + } +}); \ No newline at end of file diff --git a/modulo4/projeto-labecommerce-backend/tsconfig.json b/modulo4/projeto-labecommerce-backend/tsconfig.json new file mode 100644 index 0000000..5f06550 --- /dev/null +++ b/modulo4/projeto-labecommerce-backend/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "target": "es6", + "module": "commonjs", + "sourceMap": true, + "outDir": "./build", + "rootDir": "./src", + "removeComments": true, + "strict": true, + "noImplicitAny": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true + } +} \ No newline at end of file