Skip to content
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
39 changes: 39 additions & 0 deletions Md03_Dev_Back_end/Bloco25/25.3/express-typescript/dist/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const express_1 = __importDefault(require("express"));
require("express-async-errors");
const books_routes_1 = __importDefault(require("./routes/books.routes"));
const statusCodes_1 = __importDefault(require("./statusCodes"));
const app = (0, express_1.default)();
app.use(express_1.default.json());
const PORT = 8000;
app.get('/', (_req, res) => {
res.status(statusCodes_1.default.OK).send('Express + TypeScript');
});
app.use(books_routes_1.default);
app.use((err, _req, res, next) => {
const { name, message, details } = err;
console.log(`name: ${name}`);
switch (name) {
case 'BadRequestError':
res.status(400).json({ message });
break;
case 'ValidationError':
res.status(400).json({ message: details[0].message });
break;
case 'NotFoundError':
res.status(404).json({ message });
break;
case 'ConflictError':
res.status(409).json({ message });
break;
default:
console.error(err);
res.sendStatus(500);
}
next();
});
app.listen(PORT, () => console.log(`Server is running at http://localhost:${PORT}`));
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const express_1 = require("express");
const bookRouter = (0, express_1.Router)();
exports.default = bookRouter;
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
// ./statusCodes.ts
const statusCodes = {
OK: 200,
NOT_FOUND: 404,
CREATED: 201,
BAD_REQUEST: 400,
UNAUTHORIZED: 401,
NO_CONTENT: 204,
};
exports.default = statusCodes;
42 changes: 42 additions & 0 deletions Md03_Dev_Back_end/Bloco25/25.3/express-typescript/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import express, { Request, Response, NextFunction } from "express";
import 'express-async-errors';
import bookRouter from "./routes/books.routes";
import statusCodes from "./statusCodes";

const app = express();

app.use(express.json());
const PORT = 8000;

app.get('/', (_req: Request, res: Response) => {
res.status(statusCodes.OK).send('Express + TypeScript');
});
app.use(bookRouter);
app.use(
(err: Error, _req: Request, res: Response, next: NextFunction) => {
const { name, message, details } = err as any;
console.log(`name: ${name}`);

switch(name) {
case 'BadRequestError':
res.status(400).json({ message });
break;
case 'ValidationError':
res.status(400).json({ message: details[0].message });
break;
case 'NotFoundError':
res.status(404).json({ message });
break;
case 'ConflictError':
res.status(409).json({ message });
break;
default:
console.error(err);
res.sendStatus(500);
}

next();
}
);

app.listen(PORT,() => console.log(`Server is running at http://localhost:${PORT}`));
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
interface Book {
id?: number;
title: string;
price: number;
author: string;
isbn: string;
}

export default Book;
27 changes: 27 additions & 0 deletions Md03_Dev_Back_end/Bloco25/25.3/express-typescript/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{
"name": "express-typescript",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "npm run build && node ./dist/index.js",
"dev": "tsnd index.ts",
"build": "tsc",
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@types/express": "4.17",
"@types/node": "16.11",
"ts-node-dev": "1.1",
"typescript": "4.4"
},
"dependencies": {
"@types/restify-errors": "4.3",
"express": "4.17",
"express-async-errors": "3.1",
"restify-errors": "8.0"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { Router } from 'express';

const bookRouter = Router();

export default bookRouter;
11 changes: 11 additions & 0 deletions Md03_Dev_Back_end/Bloco25/25.3/express-typescript/statusCodes.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// ./statusCodes.ts
const statusCodes = {
OK: 200,
NOT_FOUND: 404,
CREATED: 201,
BAD_REQUEST: 400,
UNAUTHORIZED: 401,
NO_CONTENT: 204,
};

export default statusCodes;
10 changes: 10 additions & 0 deletions Md03_Dev_Back_end/Bloco25/25.3/express-typescript/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "es6",
"rootDir": "./",
"outDir": "./dist",
"esModuleInterop": true,
"strict": true
}
}
4 changes: 4 additions & 0 deletions Md03_Dev_Back_end/Bloco25/25.3/express-typescript2/.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
DB_HOSTNAME = localhost
DB_USER = root
DB_PASSWORD = N@p0lea0
DB_DATABASE = books_api
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { Request, Response } from 'express';
import statusCode from '../statusCodes';
import BookService from '../services/books.service';

export default class BookController {
constructor(private bookservice = new BookService()) {};

public getAll = async(_req: Request, res: Response) => {
const { type, message } = await this.bookservice.getAll();

if(type) return res.status(statusCode[type]).json(message);

return res.status(statusCode.OK).json(message);
}
}
44 changes: 44 additions & 0 deletions Md03_Dev_Back_end/Bloco25/25.3/express-typescript2/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import express, { Request, Response, NextFunction } from "express";
import statusCode from "./statusCodes";
import 'express-async-errors';
import bookRouter from "./routes/books.routes";

const app = express();

app.use(express.json());
const PORT = 8000;

app.get('/', (_req: Request,res: Response) => {
res.status(statusCode.OK).send('Express + TypeScript');
});

app.use(bookRouter);

app.use((err: Error, _req: Request, res: Response, next: NextFunction) => {
const { name, message, details } = err as any;
console.log(`name: ${name}`);

switch (name) {
case 'BadRequestError':
res.status(400).json({ message });
break;
case 'ValidationError':
res.status(400).json({ message: details[0].message });
break;
case 'NotFoundError':
res.status(404).json({ message });
break;
case 'ConflictError':
res.status(409).json({ message });
break;
default:
console.error(err);
res.sendStatus(500);
}

next();
});

app.listen(PORT, () => {
console.log(`Server is running at http://localhost:${PORT}`);
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// ./interfaces/book.interface.ts
interface IBook {
id?: number;
title: string;
price: number;
author: string;
isbn: string;
}

export default IBook;
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import IBook from "./book.interface";

interface IServices {
message: IBook[];
type: null | 'NOT_FOUND';
}

export default IServices;
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { Pool, ResultSetHeader } from 'mysql2/promise';
import IBook from '../interfaces/book.interface';

export default class BookModel {
public connection: Pool;

constructor(connection: Pool) {
this.connection = connection;
}

public async getAll(): Promise<IBook[]> {
const [rows] = await this.connection.execute<IBook[] & ResultSetHeader>('SELECT * FROM books');

return rows as IBook[];
}

public async create(book: IBook): Promise<IBook> {
const { title, price, author, isbn } = book;
const [{ insertId }] = await this.connection.execute<ResultSetHeader>(
'INSERT INTO books (title, price, author, isbn) VALUES (?,?,?,?)',
[title, price, author, isbn]
);

return { id: insertId, ...book };
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// ./models/connection.ts
import mysql from 'mysql2/promise'; // instalar mysql2 e dotenv
import dotenv from 'dotenv';

dotenv.config();

export default mysql.createPool({
host: process.env.DB_HOSTNAME,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_DATABASE,
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// ./routes/books.routes.ts

import { Router } from 'express';
import BooksController from '../controllers/books.controller';

const router = Router();
const booksController = new BooksController();

router.get('/books', booksController.getAll);

export default router;
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// ./services/books.service.ts
import connection from "../models/connection";
import BookModel from "../models/book.model";
import IServices from "../interfaces/services.interface";

export default class BookService {
public model: BookModel;

constructor() {
this.model = new BookModel(connection);
}

public async getAll(): Promise<IServices> {
const message = await this.model.getAll();

if(message) return { type: null, message };

return { type: 'NOT_FOUND', message };
}
}
10 changes: 10 additions & 0 deletions Md03_Dev_Back_end/Bloco25/25.3/express-typescript2/statusCodes.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
const statusCode = {
OK: 200,
NOT_FOUND: 404,
CREATED: 201,
BAD_REQUEST: 400,
UNAUTHORIZED: 401,
NO_CONTENT: 204,
}

export default statusCode;
10 changes: 10 additions & 0 deletions Md03_Dev_Back_end/Bloco25/25.3/express-typescript2/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "es6",
"rootDir": "./",
"outDir": "./dist",
"esModuleInterop": true,
"strict": true
}
}