API RESTful com MySQL e dois gateways de pagamento com autenticacao e fallback por prioridade.
- Node.js 20.x ou 22.x
- MySQL 8+
- Docker (opcional)
- Instale dependencias:
npm install-
Configure o
.env(use o.env.examplecomo base). -
Rode migrations e seeders:
node ace migration:run
node ace db:seed- Suba a API:
npm run devdocker compose up --buildServicos:
- MySQL em
localhost:3306 - Gateways em
localhost:3001elocalhost:3002 - API em
http://localhost:3333
Seed inicial cria:
gateway_1(prioridade 1)gateway_2(prioridade 2)
Token via POST /api/v1/auth/login. Use Authorization: Bearer <token> nas rotas privadas.
Roles: ADMIN, MANAGER, FINANCE, USER.
signup cria usuario USER. Para criar o primeiro ADMIN:
UPDATE users SET role = 'ADMIN' WHERE email = 'seu@email.com';Base: /api/v1
Publicas:
POST /auth/signupPOST /auth/loginPOST /purchases
Privadas (auth):
POST /auth/logoutGET /account/profileGET /clientsGET /clients/:idGET /transactionsGET /transactions/:id
Privadas (ADMIN):
GET /gatewaysPATCH /gateways/:id/statusPATCH /gateways/:id/priorityCRUD /users
Privadas (ADMIN, MANAGER):
CRUD /products
Privadas (ADMIN, FINANCE):
POST /transactions/:id/refund
POST /api/v1/purchases
{
"productId": 1,
"quantity": 2,
"clientName": "Tester",
"clientEmail": "tester@email.com",
"cardNumber": "5569000000006063",
"cvv": "010"
}npm testO arquivo .env.test usa MySQL. No Docker Compose o banco betalent_test e criado automaticamente.
No Windows, o runner pode falhar ao encerrar. Use:
npm run test:windowsPara rodar no Docker:
npm run test:docker- Valor da compra =
products.amount * quantity. - Se o Gateway 1 falhar, tenta o Gateway 2.
- Em caso de sucesso em qualquer gateway, retorna sucesso.