Spaces:
Running
Running
Commit History
9 days ago
-
feat(db): agregar migración inicial PostGIS idempotente
Se crea 0001_initial_schema.sql con PostGIS, las siete tablas del modelo (fields, vegetation_indices, weather_data, user_profiles, plant_counts, chat_messages y events), constraints, índices GIST/JSONB/FK y RLS condicional para Supabase y PostgreSQL local. El migrador normaliza DSN de SQLAlchemy, omite *.down.sql y falla si no hay migraciones. Se agregan tests unitarios y de integración; la migración se validó dos veces contra PostGIS 16 y el aislamiento RLS se comprobó con dos usuarios. Co-Authored-By: DeepSeek <noreply@deepseek.com>c521d70
-
feat(db): elimina tabla ndvi_timeseries (legacy)
Migración 0006 DROP TABLE ndvi_timeseries y sus políticas RLS. Elimina la tabla del ALLOWED_TABLES en data.py, remueve funciones deprecated (upsert_ndvi_points, get_ndvi_series) de repositories.py, actualiza frontend ER diagram y tests de integración.29437e9 -
style(ndvi): migra ndvi_timeseries legacy a vegetation_indices
Elimina fallback de ndvi_timeseries en get_index_series(). Marca upsert_ndvi_points() y get_ndvi_series() como DEPRECATED. _describe_trend() usa mean_value en vez de mean_ndvi. Tests actualizados a upsert_index_points/get_index_series. data.py añade vegetation_indices a ALLOWED_TABLES. check constraint de 0004 incluye 'ndvi'. Nueva migración 0005 copia datos legacy.f841950 -
style: aplica formato ruff a archivos del backend
Correcciones automáticas de ruff format en 7 archivos: data.py, deps.py, geometry.py, ndvi.py, agent.py, test_db.py, test_teledeteccion.py. Sin cambios de lógica.bbe2c25
-
feat(seguridad): rate limiting en /api + cabeceras de hardening (Fase 10)
7afd4d9
-
feat(agent): asistente RAG con function calling + memoria (Fase 5)
- backend/services/tools.py: 3 herramientas tipadas (tendencia NDVI, contexto climático, densidad [en desarrollo]) + TOOLS_SCHEMA + dispatch. - backend/services/agent.py: orquestación Groq/Llama 3 (OpenAI-compatible vía httpx), bucle de tool-calling y memoria en chat_messages. - backend/api/chat.py: POST /api/chat (no-streaming; SSE diferido). - repositories.get_field_by_name (con centroide para el clima). - Tests: unit (schema, _describe_trend) + integración en vivo (Groq llama la herramienta NDVI end-to-end). 58 passed, ruff limpio.9837673 -
feat(api): gateway + parcelas + teledetección NDVI/clima (Fase 3)
- backend/api/deps.py: proxy efímero BYOK (X-User-* con fallback DEV_*) + get_db. - backend/services/remote_sensing.py: NDVI vía Sentinel Hub en CDSE (Statistical API serie mensual 5 años + Process API heatmap PNG); OAuth client_credentials. - backend/services/weather.py: Open-Meteo (sin llave) + agregación mensual. - backend/services/parcels.py: CRUD + backfill NDVI de 5 años en background. - backend/api/{fields,ndvi,weather}.py: /api/fields (CRUD), /api/ndvi (+/raster), /api/weather. - main.py monta los routers nuevos; repositories.delete_field por id. - Tests: unitarios (parse stats, agregación clima, deps) + integración en vivo (NDVI real + cadena parcela->NDVI->persistencia). 52 passed, ruff limpio. - Desviación: se usa Sentinel Hub (CDSE) en vez de pystac-client+rioxarray.c9bb7d3 -
feat(db): persistencia Supabase BYOK - migraciones PostGIS/RLS + repos async (Fase 2)
- supabase/migrations/0001_init.sql (PostGIS+pgmq, 4 tablas, índices GIST/GIN) y 0002_rls.sql (RLS por usuario, efectiva con Supabase Auth). - backend/db: session.py (engine async, Session pooler), migrate.py (aplicador), repositories.py (CRUD parcelas, upsert/lectura NDVI idempotente, memoria chat; SQLAlchemy Core text() + PostGIS por robustez con asyncpg). - Deps: sqlalchemy, asyncpg, geoalchemy2, shapely, python-dateutil. - Tests integración contra Supabase real (tests/integration/test_db.py): 4 verdes. - BYOK monousuario: user_id sin FK a auth.users; conteo/PGMQ creados pero inactivos.8d80da2 -
feat: modo mock para validar el flujo de conteo sin modelo real
Añade MockInferenceAdapter y la fábrica create_adapter seleccionable con MODEL_BACKEND=mock|onnx. Con COUNTING_ENABLED=true y MODEL_BACKEND=mock, /api/count devuelve detecciones falsas plausibles (deterministas por imagen) para validar el flujo completo (carga → conteo → métricas → overlay → UI) sin el modelo real; la UI muestra el aviso '(datos de prueba / mock)'. Incluye pruebas unitarias e integración del modo mock y documenta MODEL_BACKEND en .env.example.c136a98 -
test: pruebas unitarias e integración del MVP
Añade pruebas de configuración, esquemas y métricas (unitarias) y de la API con TestClient (status y conteo en standby devuelve 503), más un esqueleto E2E con Playwright omitido por defecto.15d6ad0