API RESTful desenvolvida em Node.js e TypeScript para simulação, cálculo dinâmico e montagem de PC Gamers personalizados, com verificação de compatibilidade entre componentes de hardware.
-
** Validador de Compatibilidade de Hardware**
- Socket CPU vs. Placa-Mãe: impede combinações incompatíveis, como AM5 vs. LGA1700.
- RAM vs. Placa-Mãe: verifica compatibilidade entre DDR4/DDR5 e a placa-mãe.
- Consumo de Energia vs. Fonte: calcula o consumo estimado dos componentes e aplica margem de segurança de 20%.
-
** Gestão Dinâmica de Orçamentos**
- Soma dos componentes + taxa de montagem.
- Atualização e exclusão de orçamentos.
- Cada cliente acessa apenas os próprios orçamentos.
-
** Controle de Estoque Transacional**
- Verifica disponibilidade antes da aprovação.
- Realiza baixa de estoque dentro de uma transação Prisma.
- Restaura o estoque quando um orçamento aprovado/concluído é cancelado.
-
** Autenticação e Autorização**
- JWT.
- Roles
CUSTOMEReADMIN. - Gerenciamento de componentes restrito a administradores.
-
** Validação de Dados**
- Schemas Zod para validação e tipagem dos dados recebidos.
-
** Tratamento Global de Erros**
- Classes de erro personalizadas.
- Middleware global de erros.
express-async-errorspara tratamento assíncrono sem excesso detry/catch.
| Tecnologia | Utilização |
|---|---|
| TypeScript | Tipagem estática e segurança durante o desenvolvimento |
| Node.js | Runtime do backend |
| Express | Criação da API REST |
| PostgreSQL | Banco de dados relacional |
| Prisma ORM | Acesso ao banco, migrations e transações |
| Zod | Validação dos dados de entrada |
| JWT | Autenticação baseada em tokens |
| bcrypt | Hash de senhas |
| Docker | Containerização do banco |
| Docker Compose | Orquestração do ambiente |
| tsx | Execução em desenvolvimento |
| tsup | Build para produção |
- TypeScript: escolhido para reduzir erros em desenvolvimento e manter contratos claros entre as camadas.
- Node.js + Express: permitem construir uma API REST leve e modular.
- PostgreSQL: adequado para os relacionamentos entre usuários, orçamentos, itens e componentes.
- Prisma: fornece acesso tipado ao banco, migrations e transações.
- Zod: centraliza a validação dos payloads recebidos pela API.
- JWT: permite autenticação stateless por tokens.
- bcrypt: utilizado para armazenar senhas através de hash.
- Docker: facilita a criação de um ambiente PostgreSQL reproduzível.
- tsx + tsup:
tsxsimplifica o desenvolvimento etsupgera o build para produção.
O projeto utiliza uma arquitetura em camadas, separando HTTP, regras de negócio, validação e persistência.
src/
├── controllers/ # Interface HTTP (Request / Response)
├── services/ # Regras de negócio, cálculos e compatibilidade
├── middlewares/ # Autenticação JWT, roles e tratamento de erros
├── schemas/ # Schemas Zod para validação
├── helpers/ # Classes de erros customizados
└── lib/ # Instância do Prisma Client
Cliente
│
▼
Route
│
▼
Middleware
│
├── Autenticação JWT
└── Autorização por Role
│
▼
Controller
│
▼
Schema Zod
│
▼
Service
│
├── Regras de negócio
├── Compatibilidade
├── Cálculos
└── Transações
│
▼
Prisma ORM
│
▼
PostgreSQL
A API utiliza JWT para autenticar os usuários.
Após o login, o token deve ser enviado nas rotas protegidas:
Authorization: Bearer SEU_TOKENPode:
- criar orçamentos;
- visualizar seus próprios orçamentos;
- atualizar seus próprios orçamentos;
- excluir seus próprios orçamentos;
- consultar componentes.
Além das operações de cliente, pode:
- criar componentes;
- atualizar componentes;
- excluir componentes.
A autorização é realizada por middleware baseado em roles.
A API compara o socket do processador com o socket da placa-mãe.
CPU: AM5
Placa-Mãe: AM4
→ Incompatível
A geração da memória é comparada com a suportada pela placa-mãe.
RAM: DDR5
Placa-Mãe: DDR4
→ Incompatível
A API soma o consumo estimado dos componentes e aplica margem de segurança de 20%.
Consumo = 500W
Necessidade mínima:
500 × 1,20 = 600W
A aprovação de um orçamento pode alterar o estoque dos componentes.
Orçamento PENDING
│
▼
Solicitação de aprovação
│
▼
Verificação do estoque
│
├── Estoque insuficiente → Erro
│
└── Estoque disponível
│
▼
Baixa no estoque
│
▼
Orçamento APPROVED
O uso de $transaction garante que as operações relacionadas sejam tratadas de forma atômica.
User
│
└──< Budget
│
└──< BudgetItem >── Component
Representa os usuários da aplicação.
- nome;
- email;
- senha com hash;
- role;
- relacionamento com orçamentos.
Representa as peças disponíveis.
- nome;
- tipo;
- preço;
- quantidade em estoque;
- socket;
- tipo de RAM;
- consumo em watts;
- potência fornecida pela fonte.
Representa um orçamento.
- cliente;
- taxa de montagem;
- valor total;
- status;
- itens;
- usuário responsável.
Tabela intermediária entre Budget e Component.
- orçamento;
- componente;
- quantidade.
git clone https://github.com/torrescf/pc-builder-api.git
cd pc-builder-apinpm installCrie um arquivo .env na raiz:
PORT=3000
JWT_SECRET="sua_chave_secreta"
POSTGRES_USER="Seu_User"
POSTGRES_PASSWORD="Sua_Senha"
POSTGRES_PORT=5432
DATABASE_URL="postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@localhost:${POSTGRES_PORT}/pcgamerdb?schema=public"docker compose up -dnpx prisma migrate devnpx prisma db seednpm run start:devA API estará disponível em:
http://localhost:3000
# Desenvolvimento
npm run start:dev
# Build
npm run build
# Produção
npm run start:prod
# Prisma
npx prisma migrate dev
npx prisma db seed
npx prisma studioDurante o desenvolvimento, a API pode ser testada utilizando:
- Postman
- Insomnia
- Prisma Studio
Fluxo básico:
1. Criar usuário
2. Fazer login
3. Obter JWT
4. Consultar componentes
5. Criar orçamento
6. Validar compatibilidade
7. Aprovar orçamento
8. Verificar alteração no estoque
Em desenvolvimento.
O projeto está sendo utilizado como estudo prático de desenvolvimento backend, arquitetura em camadas, autenticação, autorização, validação de dados, regras de negócio, banco de dados relacional e controle transacional.
Este projeto está sob a licença MIT.