NutriPaw necesita 5 servicios principales con responsabilidad única. Cada uno tiene su propia base de datos para evitar acoplamiento:
| Servicio | Responsabilidad | Base de datos |
|---|---|---|
| 📦 recipe-service | Catálogo de recetas, tags, ingredientes | PostgreSQL |
| 🧠 recommend-service | Motor ML por raza/edad/patología | Redis + Pinecone |
| 💳 subscription-service | Planes, pagos, ciclos de facturación | PostgreSQL |
| 👨⚕️ vet-service | Panel veterinario, validaciones, notas | PostgreSQL |
| 🐾 pet-profile-service | Perfil de mascota, historial de salud | MongoDB |
Usa dos patrones según el tipo de operación:
recommend-service, que a su vez hace una llamada gRPC a pet-profile-service para obtener la raza/edad.subscription-service activa un plan, emite el evento subscription.activated y vet-service lo consume para habilitar el acceso del veterinario asignado.Cuando un usuario pide recetas para su perro:
recommend-service (REST)recommend-service → pet-profile-service (gRPC) para obtener raza/edadrecommend-service → recipe-service (REST) para filtrar recetas compatiblesRedis con TTL de 1h