208 lines
3.5 KiB
Markdown
208 lines
3.5 KiB
Markdown
# Setup & Demo Path
|
||
|
||
## 1. Backend (Python FastAPI)
|
||
|
||
### Requisitos
|
||
- Python 3.11+
|
||
- pip
|
||
|
||
### Setup
|
||
```bash
|
||
cd server
|
||
python -m venv venv
|
||
source venv/Scripts/activate # Windows: venv\Scripts\activate
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
### Configurar .env
|
||
```bash
|
||
cp .env.example .env
|
||
# Editar .env con:
|
||
SECRET_KEY=tu-secret-key-cambiar-en-produccion
|
||
SUPABASE_URL=https://qckndtzudciejpnwqfzt.supabase.co
|
||
SUPABASE_ANON_KEY=sb_publishable_FQR0WXK6joM043Qve9gz3A_pJfAH...
|
||
SUPABASE_SERVICE_KEY=sb_secret_2y3a_...
|
||
```
|
||
|
||
### Correr
|
||
```bash
|
||
python -m uvicorn app.main:app --reload --port 8000
|
||
```
|
||
|
||
Servidor en: http://localhost:8000
|
||
Docs: http://localhost:8000/docs
|
||
|
||
---
|
||
|
||
## 2. Flutter (Frontend)
|
||
|
||
### Requisitos
|
||
- Flutter 3.44+
|
||
- Android Studio / Xcode (para emulador)
|
||
|
||
### Setup
|
||
```bash
|
||
flutter pub get
|
||
```
|
||
|
||
### Correr
|
||
```bash
|
||
flutter run -d windows # o -d chrome, -d emulator-5554
|
||
```
|
||
|
||
---
|
||
|
||
## 3. Demo Path (3 pasos)
|
||
|
||
### Paso 1: Register
|
||
```bash
|
||
curl -X POST http://localhost:8000/auth/register \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"email": "demo@basura.app",
|
||
"phone": "4611234567",
|
||
"password": "demo123"
|
||
}'
|
||
```
|
||
|
||
**Respuesta:**
|
||
```json
|
||
{
|
||
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
|
||
"token_type": "bearer",
|
||
"user_id": "uuid-aqui"
|
||
}
|
||
```
|
||
|
||
Guardar `access_token`.
|
||
|
||
---
|
||
|
||
### Paso 2: Create Address
|
||
```bash
|
||
curl -X POST http://localhost:8000/addresses/ \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer YOUR_TOKEN_AQUI" \
|
||
-d '{
|
||
"lat": 20.5285,
|
||
"lng": -100.7980,
|
||
"alias": "Casa",
|
||
"address_text": "Celaya, Gto"
|
||
}'
|
||
```
|
||
|
||
**Respuesta:**
|
||
```json
|
||
{
|
||
"id": 1,
|
||
"user_id": "uuid",
|
||
"alias": "Casa",
|
||
"lat": 20.5285,
|
||
"lng": -100.7980,
|
||
"route_id": "RUTA-01"
|
||
}
|
||
```
|
||
|
||
Guardar `address_id`.
|
||
|
||
---
|
||
|
||
### Paso 3: Get ETA
|
||
```bash
|
||
curl -X GET http://localhost:8000/eta/1 \
|
||
-H "Authorization: Bearer YOUR_TOKEN_AQUI"
|
||
```
|
||
|
||
**Respuesta:**
|
||
```json
|
||
{
|
||
"address_id": 1,
|
||
"route_id": "RUTA-01",
|
||
"status": "EN_RUTA",
|
||
"eta_minutos": 15,
|
||
"ventana": {
|
||
"inicio": "10:00 AM",
|
||
"fin": "10:15 AM"
|
||
},
|
||
"mensaje": "El camión está en camino. Llegada estimada: 10:00 AM – 10:15 AM.",
|
||
"cached": false
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 4. Flutter Test (UI)
|
||
|
||
1. **Login**: email=`demo@basura.app`, password=`demo123`
|
||
2. **Home**: Debe mostrar 2 botones:
|
||
- 📚 Guía de Reciclaje
|
||
- 🚚 Rutas & ETA
|
||
3. **Rutas**: Click en 🚚 → Ver ETA de la ruta RUTA-01
|
||
4. **Guía**: Click en 📚 → Ver categorías de reciclaje
|
||
|
||
---
|
||
|
||
## 5. Deploy en Railway
|
||
|
||
### Crear proyecto Railway
|
||
```bash
|
||
npm i -g @railway/cli
|
||
railway login
|
||
railway init
|
||
```
|
||
|
||
### Configurar variables de entorno en Railway Dashboard
|
||
```
|
||
SUPABASE_URL=...
|
||
SUPABASE_ANON_KEY=...
|
||
SUPABASE_SERVICE_KEY=...
|
||
SECRET_KEY=...
|
||
```
|
||
|
||
### Deploy
|
||
```bash
|
||
railway up
|
||
```
|
||
|
||
Backend en vivo: `https://your-railway-project.up.railway.app`
|
||
|
||
---
|
||
|
||
## 6. Test Automatizado
|
||
|
||
### Terminal 1: Correr backend
|
||
```bash
|
||
bash run_backend.sh
|
||
```
|
||
|
||
Esperar a:
|
||
```
|
||
Uvicorn running on http://127.0.0.1:8000
|
||
```
|
||
|
||
### Terminal 2: Correr test
|
||
```bash
|
||
bash test_demo.sh
|
||
```
|
||
|
||
**Output esperado:**
|
||
```
|
||
✓ Register OK
|
||
✓ Create Address OK
|
||
✓ Get ETA OK
|
||
✓ Guide OK
|
||
=== ALL TESTS PASSED ===
|
||
```
|
||
|
||
---
|
||
|
||
## Troubleshooting
|
||
|
||
| Problema | Solución |
|
||
|----------|----------|
|
||
| `ModuleNotFoundError: No module named 'app'` | Estar en carpeta `server/` |
|
||
| `SUPABASE connection refused` | Verificar SUPABASE_URL y keys en .env |
|
||
| `JWT token invalid` | Token expiró o SECRET_KEY no coincide |
|
||
| `Flutter pub get error` | Eliminar `pubspec.lock` y correr `flutter clean` |
|
||
|