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.