Skip to content

mari-codes/multi-gateway-payment

Repository files navigation

BeTalent Back-end Challenge - Nivel 2 (AdonisJS)

API RESTful com MySQL e dois gateways de pagamento com autenticacao e fallback por prioridade.

Requisitos

  • Node.js 20.x ou 22.x
  • MySQL 8+
  • Docker (opcional)

Instalacao local

  1. Instale dependencias:
npm install
  1. Configure o .env (use o .env.example como base).

  2. Rode migrations e seeders:

node ace migration:run
node ace db:seed
  1. Suba a API:
npm run dev

Docker

docker compose up --build

Servicos:

  • MySQL em localhost:3306
  • Gateways em localhost:3001 e localhost:3002
  • API em http://localhost:3333

Gateways

Seed inicial cria:

  • gateway_1 (prioridade 1)
  • gateway_2 (prioridade 2)

Autenticacao

Token via POST /api/v1/auth/login. Use Authorization: Bearer <token> nas rotas privadas.

Roles

Roles: ADMIN, MANAGER, FINANCE, USER.

signup cria usuario USER. Para criar o primeiro ADMIN:

UPDATE users SET role = 'ADMIN' WHERE email = 'seu@email.com';

Rotas

Base: /api/v1

Publicas:

  • POST /auth/signup
  • POST /auth/login
  • POST /purchases

Privadas (auth):

  • POST /auth/logout
  • GET /account/profile
  • GET /clients
  • GET /clients/:id
  • GET /transactions
  • GET /transactions/:id

Privadas (ADMIN):

  • GET /gateways
  • PATCH /gateways/:id/status
  • PATCH /gateways/:id/priority
  • CRUD /users

Privadas (ADMIN, MANAGER):

  • CRUD /products

Privadas (ADMIN, FINANCE):

  • POST /transactions/:id/refund

Exemplo de compra

POST /api/v1/purchases

{
  "productId": 1,
  "quantity": 2,
  "clientName": "Tester",
  "clientEmail": "tester@email.com",
  "cardNumber": "5569000000006063",
  "cvv": "010"
}

Testes

npm test

O 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:windows

Para rodar no Docker:

npm run test:docker

Observacoes

  • Valor da compra = products.amount * quantity.
  • Se o Gateway 1 falhar, tenta o Gateway 2.
  • Em caso de sucesso em qualquer gateway, retorna sucesso.

About

Multi-gateway payment REST API (AdonisJS 7, MySQL, gateway auth + fallback)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors