API REST em Fastify + TypeScript para um fluxo simples de gestao de usuarios, lojas, vendedores e produtos em estoque.
- 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
- Fastify
- TypeScript
- Prisma ORM
- SQLite
- Docker e Docker Compose
git clone git@github.com:andrepieresan/api_fastify.git
cd api_fastify
docker compose up --buildA API fica disponivel em:
http://localhost:3333
Teste:
curl http://localhost:3333/checkResposta esperada:
{ "status": "online" }Requisitos:
- Node.js 20+
- Yarn
Passos:
git clone git@github.com:andrepieresan/api_fastify.git
cd api_fastify
cp .env.example .env
yarn install
yarn db:generate
yarn db:migrate
yarn devo servidor sobe em:
http://localhost:3333
Exemplo disponivel em .env.example:
DATABASE_URL="file:./dev.db"
JWT_SECRET="secret"
PASSWORD_RESET_TOKEN_TTL_MINUTES=30yarn dev # roda a API em modo desenvolvimento
yarn check # valida TypeScript sem gerar build
yarn build # compila o projeto para dist/
yarn start:prod # roda a versao compilada
yarn db:generate # gera o client do Prisma
yarn db:migrate # aplica/cria migracoes em desenvolvimento
yarn db:deploy # aplica migracoes em ambiente de deployRotas publicas:
GET /
GET /check
POST /user/store
POST /login
POST /forgot-password
POST /reset-password
Rotas protegidas por 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
Para usar rotas protegidas, envie o token retornado no login:
Authorization: Bearer SEU_TOKEN_JWTCriar usuario:
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"
}'Fazer login:
curl -X POST http://localhost:3333/login \
-H "Content-Type: application/json" \
-d '{
"email": "gestor@teste.com",
"password": "123456"
}'Com o token retornado, ja e possivel criar lojas, vincular vendedores e gerenciar produtos.