API RESTful para sistema de delivery construída com AdonisJS 6, TypeScript e SQLite.
- AdonisJS 6 - Framework Node.js
- TypeScript - Tipagem estática
- Lucid ORM - ORM do AdonisJS
- SQLite - Banco de dados
- Access Tokens - Autenticação por token
- Node.js 18+
- npm ou yarn
# Clone o repositório
git clone https://github.com/andrepfdev/adonis-delivery.git
# Entre no diretório
cd adonis-delivery
# Instale as dependências
npm install
# Configure o arquivo .env
cp .env.example .env
# Execute as migrations
node ace migration:run
# Inicie o servidor de desenvolvimento
npm run devPOST /api/auth/register
Content-Type: application/json
{
"fullName": "João Silva",
"email": "joao@example.com",
"password": "senha123"
}Resposta (201):
{
"message": "Usuário registrado com sucesso",
"user": {
"id": 1,
"fullName": "João Silva",
"email": "joao@example.com"
},
"token": {
"type": "Bearer",
"value": "oat_MQ.example_token_here"
}
}POST /api/auth/login
Content-Type: application/json
{
"email": "joao@example.com",
"password": "senha123"
}Resposta (200):
{
"message": "Login com sucesso",
"user": {
"id": 1,
"fullName": "João Silva",
"email": "joao@example.com"
},
"token": {
"type": "Bearer",
"value": "oat_MQ.example_token_here"
}
}POST /api/auth/logout
Authorization: Bearer {token}Resposta (200):
{
"message": "Logout com sucesso"
}GET /api/auth/me
Authorization: Bearer {token}Resposta (200):
{
"user": {
"id": 1,
"fullName": "João Silva",
"email": "joao@example.com",
"createdAt": "2025-11-15T10:30:00.000Z"
}
}Nota: Todos os endpoints de clientes requerem autenticação via token Bearer.
GET /api/customers
Authorization: Bearer {token}Resposta (200):
{
"data": [
{
"id": 1,
"name": "Maria Santos",
"email": "maria@example.com",
"phoneNumber": "11987654321",
"cpf": "12345678900",
"address": "Rua das Flores",
"number": "123",
"city": "São Paulo",
"state": "SP",
"zipCode": "01234-567",
"status": true,
"createdAt": "2025-11-15T10:30:00.000Z",
"updatedAt": "2025-11-15T10:30:00.000Z"
}
]
}GET /api/customers/:id
Authorization: Bearer {token}Resposta (200):
{
"data": {
"id": 1,
"name": "Maria Santos",
"email": "maria@example.com",
"phoneNumber": "11987654321",
"cpf": "12345678900",
"address": "Rua das Flores",
"number": "123",
"city": "São Paulo",
"state": "SP",
"zipCode": "01234-567",
"status": true,
"createdAt": "2025-11-15T10:30:00.000Z",
"updatedAt": "2025-11-15T10:30:00.000Z"
}
}POST /api/customers
Authorization: Bearer {token}
Content-Type: application/json
{
"name": "Maria Santos",
"email": "maria@example.com",
"phoneNumber": "11987654321",
"cpf": "12345678900",
"address": "Rua das Flores",
"number": "123",
"city": "São Paulo",
"state": "SP",
"zipCode": "01234-567",
"status": true
}Resposta (201):
{
"message": "Customer created successfully",
"data": {
"id": 1,
"name": "Maria Santos",
"email": "maria@example.com",
"phoneNumber": "11987654321",
"cpf": "12345678900",
"address": "Rua das Flores",
"number": "123",
"city": "São Paulo",
"state": "SP",
"zipCode": "01234-567",
"status": true,
"createdAt": "2025-11-15T10:30:00.000Z",
"updatedAt": "2025-11-15T10:30:00.000Z"
}
}PUT /api/customers/:id
Authorization: Bearer {token}
Content-Type: application/json
{
"name": "Maria Santos Silva",
"email": "maria.silva@example.com",
"phoneNumber": "11987654321",
"cpf": "12345678900",
"address": "Rua das Flores",
"number": "123",
"city": "São Paulo",
"state": "SP",
"zipCode": "01234-567",
"status": true
}Resposta (200):
{
"message": "Customer updated successfully",
"data": {
"id": 1,
"name": "Maria Santos Silva",
"email": "maria.silva@example.com",
"phoneNumber": "11987654321",
"cpf": "12345678900",
"address": "Rua das Flores",
"number": "123",
"city": "São Paulo",
"state": "SP",
"zipCode": "01234-567",
"status": true,
"createdAt": "2025-11-15T10:30:00.000Z",
"updatedAt": "2025-11-16T14:20:00.000Z"
}
}DELETE /api/customers/:id
Authorization: Bearer {token}Resposta (200):
{
"message": "Customer deleted successfully"
}Nota: Todos os endpoints de pedidos requerem autenticação via token Bearer.
POST /api/orders
Authorization: Bearer {token}
Content-Type: application/json
{
"product_id": 1,
"quantity": 2,
"address": "Rua das Palmeiras, 456"
}Resposta (200):
{
"message": "Pedido criado com sucesso!",
"orderData": {
"product_id": 1,
"quantity": 2,
"address": "Rua das Palmeiras, 456"
},
"user": {
"id": 1,
"fullName": "João Silva",
"email": "joao@example.com"
}
}GET /api/orders/:id
Authorization: Bearer {token}Resposta (200):
{
"message": "Order details",
"orderId": 1,
"user": {
"id": 1,
"fullName": "João Silva",
"email": "joao@example.com"
}
}A API utiliza Bearer Token para autenticação. Após fazer login ou registro, você receberá um token que deve ser incluído no header de todas as requisições protegidas:
Authorization: Bearer {seu_token_aqui}
- users - Usuários do sistema
- auth_access_tokens - Tokens de acesso
- customers - Clientes
- orders - Pedidos
- order_items - Itens dos pedidos
- products - Produtos
- payments - Pagamentos
# Desenvolvimento
npm run dev
# Build
npm run build
# Produção
npm start
# Executar migrations
node ace migration:run
# Reverter migrations
node ace migration:rollback
# Limpar banco de dados
node ace migration:fresh
# Executar testes
npm test- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add some AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
Este projeto está sob a licença MIT.
André - andrepfdev