Uma visão aprofundada sobre as principais bibliotecas, ferramentas e suas utilizações específicas no backend da API Trace Point.
O Node.js é o ambiente de execução JavaScript no servidor, permitindo a construção de aplicações backend eficientes. O Express.js é um framework minimalista e flexível para Node.js, usado para construir a estrutura da nossa API RESTful.
express
(Versão: ^5.1.0
): Framework principal para roteamento e middlewares.
express()
), definir rotas HTTP (server.get()
, server.post()
, server.put()
, server.delete()
), organizar rotas com Router
, aplicar middlewares globais como express.json()
para parsing do corpo de requisições JSON, e para servir arquivos estáticos (express.static()
).Request
, Response
, NextFunction
, Router
, e a instância principal express
.O PostgreSQL é o sistema de gerenciamento de banco de dados relacional escolhido pela sua robustez e funcionalidades avançadas. O TypeORM é um ORM (Object-Relational Mapper) maduro para TypeScript e JavaScript, que facilita a interação com o banco de dados de forma orientada a objetos.
typeorm
(Versão: ^0.3.24
): Biblioteca ORM.
@Entity
, @Column
, @PrimaryGeneratedColumn
, @PrimaryColumn
), definição de relacionamentos (@ManyToOne
, @OneToMany
, @ManyToMany
, @OneToOne
, @JoinColumn
, @JoinTable
), configuração da conexão e opções do banco de dados (DataSource
em AppDataSource.ts
), execução de migrações (MigrationInterface
, QueryRunner
com queryRunner.query()
) e operações CRUD através de repositórios ou do EntityManager (save
, find
, findOneBy
, delete
).DataSource
, MigrationInterface
e QueryRunner
.pg
(Versão: ^8.16.0
): Driver Node.js para PostgreSQL.
reflect-metadata
(Versão: ^0.2.2
): Polyfill necessário para o sistema de metadados e decoradores do TypeScript, fundamental para o TypeORM.
import "reflect-metadata";
), geralmente no arquivo principal do servidor (server.ts
ou index.ts
) antes de qualquer código do TypeORM ser executado.Para garantir a integridade dos dados recebidos pela API e transformar dados entre diferentes formatos, utilizamos:
class-validator
(Versão: ^0.14.2
): Validação de objetos (especialmente DTOs) baseada em decoradores.
@IsNotEmpty()
, @IsString()
, @IsEmail()
, @IsUUID()
, @IsDate()
, @IsEnum()
, @IsOptional()
, @ValidateNested()
(para validar DTOs aninhados), @IsIn()
, @IsNumber()
, @IsPostalCode()
. A função validate()
é usada no utilitário validateRequestBody.ts
para executar essas validações.validate
, ValidationError
.class-transformer
(Versão: ^0.5.1
): Biblioteca para transformar objetos planos (plain objects) em instâncias de classes (e vice-versa).
plainToInstance()
. O decorador @Type(() => SomeDTO)
é usado para especificar o tipo de propriedades aninhadas ou para transformações customizadas (ex: string para Date).plainToInstance
, Type
(decorator).jsonwebtoken
(Versão: ^8.5.1
): Implementação de JSON Web Tokens (JWT) para autenticação.
TokenManager.ts
para: Gerar tokens de acesso e de atualização (refresh tokens) usando sign()
, e para verificar a validade e decodificar tokens recebidos usando verify()
.sign
, verify
, JwtPayload
. (@types/jsonwebtoken
para tipagem).bcrypt
(Versão: ^6.0.0
): Biblioteca para hashing de senhas.
hash()
) antes de armazená-las no banco de dados, e para comparar uma senha fornecida durante o login com o hash armazenado (compare()
) de forma segura, sem armazenar senhas em texto plano.hash
, compare
. (@types/bcrypt
para tipagem).dotenv
(Versão: ^16.5.0
): Carrega variáveis de ambiente de um arquivo .env
para process.env
.
dotenv.config()
no início da aplicação (em EsportEnv.ts
).* as dotenv
ou import { config } from "dotenv"
.colorette
(Versão: ^2.0.20
): Biblioteca para adicionar cores a saídas de texto no terminal.
customLogger.ts
, melhorando a legibilidade dos logs no console durante o desenvolvimento e execução.blueBright
, magentaBright
, greenBright
, yellowBright
, redBright
(do arquivo customLogger.ts
).typescript
(devDependencies): Linguagem principal do projeto.ts-node
(devDependencies): Executa arquivos TypeScript diretamente. Usado para scripts CLI do TypeORM.ts-node-dev
(devDependencies): Para desenvolvimento, reinicia o servidor automaticamente após alterações no código. Usado em npm run dev
.cross-env
(devDependencies): Define variáveis de ambiente de forma portável entre sistemas operacionais para scripts NPM.@types/*
(devDependencies): Pacotes de definição de tipos TypeScript para bibliotecas JavaScript, garantindo a checagem de tipos e o autocompletar no desenvolvimento.