# SMD Delivery — Etapa 1

Pacote inicial do delivery com:

- Banco MySQL.
- Painel de gestão em PHP.
- Login administrativo.
- Dashboard.
- Categorias.
- Produtos com foto, preço e estoque.
- Pedidos e mudança de status.
- API REST para o aplicativo Android Kotlin.
- Cadastro e login do cliente por token.
- Endereços do cliente.
- Criação de pedido com validação e baixa de estoque.
- Histórico de pedidos.

## Requisitos

- PHP 8.1 ou superior.
- MySQL 8 ou MariaDB 10.5 ou superior.
- Extensões PHP: `pdo_mysql`, `fileinfo`, `mbstring`, `json`.
- Apache 2.4 ou Nginx.
- Certificado HTTPS.

## 1. Criar o banco

1. Abra o phpMyAdmin.
2. Entre na aba **Importar**.
3. Escolha `database/database.sql`.
4. Execute a importação.

O script cria o banco `smd_delivery` e todas as tabelas.

## 2. Configurar o sistema

O pacote já inclui um arquivo `.env`. Edite esse arquivo com os dados do seu MySQL:

```env
APP_NAME="SMD Delivery"
APP_URL="https://delivery.seudominio.com.br"
APP_TIMEZONE="America/Belem"
APP_DEBUG=false

DB_HOST="127.0.0.1"
DB_PORT="3306"
DB_DATABASE="smd_delivery"
DB_USERNAME="USUARIO_MYSQL"
DB_PASSWORD="SENHA_MYSQL"
```

Não coloque espaços antes ou depois do sinal `=`.

## 3. Publicar no OVH

Aponte a raiz pública do domínio para a pasta:

```text
smd_delivery_etapa1/public
```

As pastas `app`, `config` e `database` devem ficar fora da raiz pública sempre que possível.

### Apache

Exemplo de VirtualHost:

```apache
<VirtualHost *:80>
    ServerName delivery.seudominio.com.br
    DocumentRoot /var/www/smd_delivery/public

    <Directory /var/www/smd_delivery/public>
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/smd_delivery_error.log
    CustomLog ${APACHE_LOG_DIR}/smd_delivery_access.log combined
</VirtualHost>
```

### Nginx

```nginx
server {
    listen 80;
    server_name delivery.seudominio.com.br;
    root /var/www/smd_delivery/public;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    }

    location ~ /\. {
        deny all;
    }
}
```

Ajuste o caminho do PHP-FPM de acordo com a versão instalada no seu servidor.

## 4. Permissão para imagens

```bash
sudo chown -R www-data:www-data /var/www/smd_delivery/public/uploads
sudo chmod -R 775 /var/www/smd_delivery/public/uploads
```

## 5. Primeiro acesso

Acesse:

```text
https://delivery.seudominio.com.br/gestao/login.php
```

Credenciais iniciais:

```text
Usuário: admin
Senha: Admin@123
```

Após entrar, abra **Minha senha** no menu e troque a senha padrão antes de colocar o sistema em produção.

## 6. Testar a API

### Saúde da API

```text
GET https://delivery.seudominio.com.br/api/v1/health.php
```

### Categorias

```text
GET https://delivery.seudominio.com.br/api/v1/categorias.php
```

### Produtos

```text
GET https://delivery.seudominio.com.br/api/v1/produtos.php
GET https://delivery.seudominio.com.br/api/v1/produtos.php?categoria_id=1
GET https://delivery.seudominio.com.br/api/v1/produtos.php?busca=refrigerante
```

### Cadastrar cliente

```bash
curl -X POST 'https://delivery.seudominio.com.br/api/v1/cliente_cadastrar.php' \
  -H 'Content-Type: application/json' \
  -d '{
    "nome":"Cliente Teste",
    "cpf_cnpj":"12345678909",
    "telefone":"91999999999",
    "email":"cliente@teste.com",
    "senha":"123456"
  }'
```

### Login do cliente

```bash
curl -X POST 'https://delivery.seudominio.com.br/api/v1/cliente_login.php' \
  -H 'Content-Type: application/json' \
  -d '{"login":"cliente@teste.com","senha":"123456"}'
```

Guarde o campo `token` retornado.

### Cadastrar endereço

```bash
curl -X POST 'https://delivery.seudominio.com.br/api/v1/enderecos.php' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer SEU_TOKEN' \
  -d '{
    "apelido":"Casa",
    "cep":"66000000",
    "logradouro":"Avenida Principal",
    "numero":"100",
    "bairro":"Centro",
    "cidade":"Belém",
    "estado":"PA",
    "referencia":"Próximo à praça",
    "principal":true
  }'
```

### Criar pedido

```bash
curl -X POST 'https://delivery.seudominio.com.br/api/v1/pedido_criar.php' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer SEU_TOKEN' \
  -d '{
    "endereco_id":1,
    "forma_pagamento":"DINHEIRO",
    "troco_para":50,
    "observacao":"Entregar na portaria",
    "itens":[
      {"produto_id":1,"quantidade":3}
    ]
  }'
```

O produto de demonstração custa R$ 9,90. Três unidades passam pelo pedido mínimo inicial de R$ 20,00.

### Consultar pedidos

```bash
curl 'https://delivery.seudominio.com.br/api/v1/meus_pedidos.php' \
  -H 'Authorization: Bearer SEU_TOKEN'
```

## Formas de pagamento aceitas nesta etapa

- `PIX`
- `DINHEIRO`
- `CARTAO_ENTREGA`

## Status aceitos

- `PEDIDO_REALIZADO`
- `AGUARDANDO_CONFIRMACAO`
- `CONFIRMADO`
- `EM_PREPARACAO`
- `PRONTO`
- `AGUARDANDO_ENTREGADOR`
- `SAIU_PARA_ENTREGA`
- `ENTREGUE`
- `CANCELADO`

## Segurança

- O Android nunca acessará o MySQL diretamente.
- O aplicativo se comunicará somente com os arquivos da API PHP.
- As senhas usam `password_hash`.
- Os tokens são armazenados no banco somente como SHA-256.
- As consultas usam PDO com parâmetros.
- Formulários administrativos possuem proteção CSRF.
- Upload aceita somente JPG, PNG e WEBP.

## Próxima etapa

A próxima etapa é o projeto Android Cliente em Kotlin, consumindo estes endpoints com Retrofit, RecyclerView, ViewModel, Room e Material Design.
