- services.module: import NotificationsModule - services.service: inject NotificationsService, notify the other party (user or professional) when service status changes to accepted/denied/ cancelled/active/completed - ARQUITECTURA.md: updated to reflect current migration state (all migrated) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
8.1 KiB
8.1 KiB
ProsApp — Arquitectura del Proyecto
📁 ~/Documents/GitHub/
Mapa de Componentes
┌──────────────────────────────────────────────────────────────────┐
│ USUARIOS (Web) │
│ │
│ ┌──────────────────────┐ ┌──────────────────────┐ │
│ │ prosapp_landing_page │ │ prosappweb │ │
│ │ (también prosapp_2026)│ │ Flutter Web │ │
│ │ HTML + Tailwind CDN │ │ Provider + REST API │ │
│ │ ✅ COMPLETO │ │ ✅ MIGRADO │ │
│ └──────────┬───────────┘ └──────────┬───────────┘ │
│ │ │ │
│ ┌──────────▼──────────────────────────▼───────────────────┐ │
│ │ prosapp-migration/admin │ │
│ │ Next.js 16 + shadcn + Tailwind │ │
│ │ Panel administrador │ │
│ │ ✅ COMPLETO (95%) │ │
│ └──────────┬──────────────────────────────────────────────┘ │
└─────────────┼─────────────────────────────────────────────────┘
│
│ HTTP / JWT
│
┌─────────────▼─────────────────────────────────────────────────┐
│ prosapp-migration/backend │
│ NestJS + Prisma + PostgreSQL │
│ ✅ COMPLETO — Deployado en Coolify │
│ │
│ Módulos: auth, users, professionals, services, professions, │
│ locations, chat (Socket.IO), comments, │
│ notifications (FCM), storage, settings │
│ │
│ ┌──────────────┐ │
│ │ PostgreSQL │ (servidor Coolify) │
│ └──────────────┘ │
└─────────────────────────────────────────────────────────────────┘
│
│ HTTP / JWT
│
┌─────────────▼─────────────────────────────────────────────────┐
│ USUARIOS (Mobile) │
│ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ prosappco │ │
│ │ Flutter iOS/Android │ │
│ │ Bloc + 8 repos packages — ✅ MIGRADO │ │
│ │ • user_repository • professional_repository │ │
│ │ • chat_repository • score_repository │ │
│ │ • city_repository • service_repository │ │
│ │ • profession_repository • setting_repository │ │
│ │ Push notifications via FCM + firebase_messaging │ │
│ └──────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
Estado por Proyecto
| Carpeta | App | Tech | Estado |
|---|---|---|---|
prosapp-migration/backend |
API Central | NestJS + Prisma + PostgreSQL | ✅ 100% — Deployado. Notificaciones FCM integradas en cambios de estado de servicio |
prosapp-migration/admin |
Panel Admin | Next.js 16 + shadcn | ✅ 95% — Pendiente: test post-deploy |
prosappweb |
App Web (Flutter) | Flutter Web + Provider | ✅ 95% — Migrado. Pendiente: testing manual |
prosappco |
App Mobile (iOS/Android) | Flutter + Bloc + 8 repos | ✅ 95% — Migrado + FCM. Pendiente: testing manual |
prosapp_landing_page |
Landing Page | HTML + Tailwind CDN | ✅ 100% — Estática, completa |
Lo que está hecho
Backend
- Auth: registro, login, JWT, perfil (
/auth/*) - Users: CRUD, foto, FCM token (
/users/*) - Professionals: perfil, horarios, aprobación (
/professionals/*) - Services: crear, listar (por rol), calendario, estado (
/services/*)- Validación de transiciones de estado
- Notificación FCM automática al cambiar estado
- Comments/Scores: crear, listar por usuario/profesional, reputación
- Chat: Socket.IO + REST (
/chat/*) - Storage: upload a S3/local (
/storage/upload) - Settings: CRUD global
- Professions + Locations: catálogos
- Notifications: envío FCM vía
POST /notifications/send
prosappweb (Flutter Web)
- Auth migrada: login, registro,
GET /auth/me - Todos los providers/models apuntan a REST API
- Rutas correctas:
/services/me,/services/professional,/services/professional/requests,/services/professional/calendar,/services/public-calendar/:id,/services/:id/status - DTOs correctos: snake_case,
rate,range1_hour1,location_preference - Status en inglés en todos los archivos
- Chat:
GET /chat/my,POST /chat/start/:id - Horario:
PATCH /professionals/me/schedulescon formato array - Score:
POST /commentscon DTO correcto user.proState(int) en lugar del antiguouser.state(string español)
prosappco (Flutter Mobile)
- 8 packages:
api_*_repository.dartimplementados (Firebase eliminado) firebase_messaging+firebase_corepara push notifications- FCM token registrado en backend al hacer login (
PATCH /users/me/fcm-token) - Notificaciones en foreground via
flutter_local_notifications - Background handler registrado
- Status conversion maps: int ↔ string
Timestamp→Stringen todas las entidades- Professional UUID vs user_id: fallback resuelto en backend y Flutter
Pendiente (Fase 3 — Testing)
| # | Tarea | Quién |
|---|---|---|
| T1 | Testear login/registro en prosappweb y prosappco | Manual |
| T2 | Testear flujo completo: crear → aceptar → iniciar → terminar → puntuar | Manual |
| T3 | Verificar notificaciones push llegan al dispositivo | Manual |
| T4 | Probar chat en tiempo real (Socket.IO) | Manual |
| T5 | Verificar WebSockets en producción | Manual |
| T6 | Probar CRUDs desde admin (Profesiones, Ciudades, Settings) | Manual |
| T7 | Verificar flujo aprobación/rechazo de profesionales desde admin | Manual |
Variables de Entorno Requeridas (Coolify)
DATABASE_URL=postgresql://...
JWT_SECRET=...
FCM_SERVER_KEY=... # Firebase Cloud Messaging server key
STORAGE_PATH=... # o S3 config si aplica