# LogiDash — Backend Laravel API

API genérica sobre MySQL (`logica_combustible`), estilo **NoSQL**: una sola ruta por tabla para listar, crear, actualizar y borrar.

## Requisitos (WAMP)

1. **WAMP** con Apache + MySQL + PHP 8.2+ (icono verde).
2. **Composer** — ya hay `backend/composer.phar` si no tienes Composer global.
3. Base de datos creada e importada:
   - Crear BD `logica_combustible` en phpMyAdmin.
   - Importar `database/schema` y `database/dummydata.sql`.

## Instalación (ya hecha en este repo)

```powershell
cd c:\wamp64\www\logidash\backend
c:\wamp64\bin\php\php8.2.29\php.exe composer.phar create-project laravel/laravel laravel-api
```

Configura `laravel-api/.env`:

```env
DB_CONNECTION=mysql
DB_DATABASE=logica_combustible
DB_USERNAME=root
DB_PASSWORD=
```

## Cómo ejecutar la API

### Opción A — WAMP (recomendado)

URL base:

`http://localhost/logidash/backend/laravel-api/public/api`

Prueba: `http://localhost/logidash/backend/laravel-api/public/api/health`

### Opción B — Servidor embebido Laravel

```powershell
cd c:\wamp64\www\logidash\backend\laravel-api
c:\wamp64\bin\php\php8.2.29\php.exe artisan serve --port=8000
```

URL: `http://127.0.0.1:8000/api/health`

## API `/api/db/{tabla}` — uso tipo NoSQL

| Acción | HTTP | Ejemplo |
|--------|------|---------|
| Listar tablas | `GET` | `/api/db` |
| SELECT * | `GET` | `/api/db/ordenes_combustible` |
| Filtros | `GET` | `/api/db/ordenes?estado=registrada&limit=20` |
| SELECT uno | `GET` | `/api/db/ordenes_combustible/91` |
| INSERT | `POST` | `/api/db/ordenes_combustible` + JSON body |
| UPDATE | `PUT` o `PATCH` | `/api/db/ordenes_combustible/91` + JSON |
| DELETE | `DELETE` | `/api/db/ordenes_combustible/91` |

### Alias de tablas (como `db.order`)

| Alias | Tabla real |
|-------|------------|
| `orders`, `order`, `ordenes` | `ordenes_combustible` |
| `users`, `user` | `usuarios` |
| `gasolinera` | `gasolineras` |
| … | ver `config/logidash.php` |

### Ejemplos desde el móvil (fetch)

```typescript
const API = 'http://localhost/logidash/backend/laravel-api/public/api';

// SELECT * FROM ordenes_combustible
const list = await fetch(`${API}/db/orders?limit=10`).then(r => r.json());

// INSERT (create)
await fetch(`${API}/db/orders`, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    numero_orden: 'OC-2026-0100',
    fecha_autorizacion: '2026-06-04',
    hora_autorizacion: '08:30:00',
    id_gasolinera: 1,
    id_empresa_cliente: 1,
    id_vehiculo: 1,
    id_conductor: 1,
    id_ruta: 1,
    id_zona: 1,
    id_tipo_combustible: 3,
    id_usuario: 4,
    kilometraje_actual: 131200,
    cantidad_galones: 46.5,
    valor_total_factura: 1271.25,
    confirmacion: 1,
    estado: 'registrada',
  }),
});

// UPDATE
await fetch(`${API}/db/orders/91`, {
  method: 'PATCH',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ observaciones: 'Corregido desde app' }),
});

// DELETE
await fetch(`${API}/db/orders/99`, { method: 'DELETE' });
```

## Seguridad (prototipo)

- Solo tablas en lista blanca (`config/logidash.php`).
- `password` (usuarios) y `token` (sesiones) no se devuelven en JSON.
- **Sin autenticación aún** — añadir Sanctum antes de producción.

## Estructura

```
backend/
├── composer.phar
├── uploads/              # imágenes km/factura
├── README.md             # este archivo
└── laravel-api/
    ├── app/Http/Controllers/Api/DbController.php
    ├── app/Services/DbGatewayService.php
    ├── config/logidash.php
    └── routes/api.php
```

## Próximos pasos

1. Importar schema + dummy en MySQL.
2. Probar `/api/health` y `/api/db/usuarios`.
3. Conectar `mobile` con `environment.apiUrl`.
4. Auth (login operador) + subida de fotos a `backend/uploads/`.
