API REST simples em AdonisJS + TypeScript para um portfolio publico com usuarios, lojas, vendedores e produtos.
- Cadastro de usuarios com perfis
vendedor,gestoremaster. - Login com JWT e rotas protegidas por autenticacao/autorizacao.
- Recuperacao e redefinicao de senha.
- Cadastro e consulta de lojas.
- Vinculo de vendedores a lojas.
- Cadastro, listagem, edicao e remocao de produtos por loja.
- Node.js 20+
- AdonisJS 6
- Lucid ORM
- SQLite
- JWT
npm install
cp .env.example .env
node ace generate:key
npm run migration:run
npm run devA API sobe em:
http://localhost:3333
Teste rapido:
curl http://localhost:3333/checkResposta esperada:
{ "status": "online" }TZ=UTC
PORT=3333
HOST=localhost
LOG_LEVEL=info
APP_KEY=change_me_with_node_ace_generate_key
NODE_ENV=development
JWT_SECRET=change_this_in_production
PASSWORD_RESET_TOKEN_TTL_MINUTES=30GET /
GET /check
POST /user/store
POST /login
POST /forgot-password
POST /reset-password
Envie o token retornado no login:
Authorization: Bearer SEU_TOKEN_JWT
GET /user/me
GET /users
GET /stores
GET /stores/:storeId
POST /stores
PATCH /stores/:storeId
POST /stores/:storeId/sellers
DELETE /stores/:storeId/sellers/:sellerId
GET /products
GET /products/:productId
PATCH /products/:productId
DELETE /products/:productId
GET /stores/:storeId/products
POST /stores/:storeId/products
Criar gestor:
curl -X POST http://localhost:3333/user/store \
-H "Content-Type: application/json" \
-d '{
"name": "Gestor Teste",
"email": "gestor@teste.com",
"password": "123456",
"role": "gestor"
}'Login:
curl -X POST http://localhost:3333/login \
-H "Content-Type: application/json" \
-d '{
"email": "gestor@teste.com",
"password": "123456"
}'Criar loja:
curl -X POST http://localhost:3333/stores \
-H "Content-Type: application/json" \
-H "Authorization: Bearer SEU_TOKEN_JWT" \
-d '{
"name": "Loja Centro",
"description": "Unidade principal",
"city": "Sao Paulo",
"commissionRate": 10,
"active": true
}'Criar produto para uma loja:
curl -X POST http://localhost:3333/stores/STORE_ID/products \
-H "Content-Type: application/json" \
-H "Authorization: Bearer SEU_TOKEN_JWT" \
-d '{
"name": "Notebook",
"description": "Notebook para demonstração",
"sku": "NOTE-001",
"quantity": 5,
"location": "Prateleira A"
}'