Skip to content

andrepfdev/adonis-delivery

Repository files navigation

Adonis Delivery API

API RESTful para sistema de delivery construída com AdonisJS 6, TypeScript e SQLite.

🚀 Tecnologias

  • AdonisJS 6 - Framework Node.js
  • TypeScript - Tipagem estática
  • Lucid ORM - ORM do AdonisJS
  • SQLite - Banco de dados
  • Access Tokens - Autenticação por token

📋 Pré-requisitos

  • Node.js 18+
  • npm ou yarn

🔧 Instalação

# 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 dev

📚 Endpoints da API

Autenticação

Registrar Usuário

POST /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"
  }
}

Login

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"
  }
}

Logout

POST /api/auth/logout
Authorization: Bearer {token}

Resposta (200):

{
  "message": "Logout com sucesso"
}

Obter Usuário Autenticado

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"
  }
}

Clientes

Nota: Todos os endpoints de clientes requerem autenticação via token Bearer.

Listar Clientes

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"
    }
  ]
}

Obter Cliente por ID

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"
  }
}

Criar Cliente

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"
  }
}

Atualizar Cliente

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"
  }
}

Deletar Cliente

DELETE /api/customers/:id
Authorization: Bearer {token}

Resposta (200):

{
  "message": "Customer deleted successfully"
}

Pedidos

Nota: Todos os endpoints de pedidos requerem autenticação via token Bearer.

Criar Pedido

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"
  }
}

Obter Pedido por ID

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"
  }
}

🔐 Autenticação

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}

🗄️ Estrutura do Banco de Dados

Tabelas

  • users - Usuários do sistema
  • auth_access_tokens - Tokens de acesso
  • customers - Clientes
  • orders - Pedidos
  • order_items - Itens dos pedidos
  • products - Produtos
  • payments - Pagamentos

📝 Scripts Disponíveis

# 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

🤝 Contribuindo

  1. Fork o projeto
  2. Crie uma branch para sua feature (git checkout -b feature/AmazingFeature)
  3. Commit suas mudanças (git commit -m 'Add some AmazingFeature')
  4. Push para a branch (git push origin feature/AmazingFeature)
  5. Abra um Pull Request

📄 Licença

Este projeto está sob a licença MIT.

✨ Autor

André - andrepfdev

About

Minha primeira API com Javascript/Typescript, para isso usei o framework Adonis.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors