# πŸ—οΈ Arquitectura del Sistema Karibeo ## VisiΓ³n General Karibeo estΓ‘ construido siguiendo una arquitectura modular de frontend con separaciΓ³n clara de responsabilidades y patrones de diseΓ±o modernos. ## Diagrama de Arquitectura ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ PRESENTACIΓ“N β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Tourist β”‚ β”‚ Hotel β”‚ β”‚Restaurantβ”‚ β”‚ Commerce β”‚ β”‚ β”‚ β”‚ App β”‚ β”‚ POS β”‚ β”‚ POS β”‚ β”‚ POS β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Admin Dashboard & Control Panel β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ↓ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ CAPA DE NEGOCIO β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Contexts β”‚ β”‚ Hooks β”‚ β”‚ Services β”‚ β”‚Validationβ”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ↓ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ CAPA DE DATOS β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ API β”‚ β”‚ Cache β”‚ β”‚ LocalSt β”‚ β”‚ State β”‚ β”‚ β”‚ β”‚ Client β”‚ β”‚(TanStack)β”‚ β”‚ (tokens) β”‚ β”‚Managementβ”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ↓ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ BACKEND API REST β”‚ β”‚ https://karibeo.lesoluciones.net:8443/api/v1 β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ## Capas de la AplicaciΓ³n ### 1. Capa de PresentaciΓ³n (UI) #### Componentes Principales ``` src/components/ β”œβ”€β”€ ui/ # Componentes base (shadcn) β”œβ”€β”€ admin/ # Componentes administrativos β”œβ”€β”€ hotel/ # Componentes hoteleros β”œβ”€β”€ restaurant/ # Componentes de restaurante β”œβ”€β”€ tourist/ # Componentes para turistas └── shared/ # Componentes compartidos ``` **Responsabilidades**: - Renderizado de UI - InteracciΓ³n con el usuario - DelegaciΓ³n de lΓ³gica a hooks y contexts **Patrones Utilizados**: - **Composition Pattern**: ComposiciΓ³n de componentes pequeΓ±os - **Compound Components**: Para componentes complejos como Forms - **Render Props**: Para lΓ³gica reutilizable ### 2. Capa de LΓ³gica de Negocio #### React Contexts ```typescript src/contexts/ β”œβ”€β”€ AuthContext.tsx # AutenticaciΓ³n y sesiΓ³n β”œβ”€β”€ CartContext.tsx # Carrito de compras β”œβ”€β”€ CurrencyContext.tsx # GestiΓ³n de monedas └── LanguageContext.tsx # InternacionalizaciΓ³n ``` **Responsabilidades**: - Estado global de la aplicaciΓ³n - LΓ³gica de negocio compartida - SincronizaciΓ³n de estado #### Custom Hooks ```typescript src/hooks/ β”œβ”€β”€ useAdminData.ts # Datos de administraciΓ³n β”œβ”€β”€ useBooking.ts # LΓ³gica de reservas β”œβ”€β”€ useChannelManager.ts # Channel manager β”œβ”€β”€ useRolesPermissions.ts # Roles y permisos └── useEmergencyData.ts # Sistema de emergencias ``` **Responsabilidades**: - Encapsular lΓ³gica reutilizable - GestiΓ³n de efectos secundarios - IntegraciΓ³n con APIs ### 3. Capa de Servicios (API) #### Servicios API ```typescript src/services/ β”œβ”€β”€ adminApi.ts # API de administraciΓ³n β”œβ”€β”€ emergencyApi.ts # API de emergencias β”œβ”€β”€ bookmarkApi.ts # API de favoritos β”œβ”€β”€ chatApi.ts # API de mensajerΓ­a β”œβ”€β”€ configApi.ts # API de configuraciΓ³n β”œβ”€β”€ paymentService.ts # Servicio de pagos β”œβ”€β”€ reviewService.ts # Servicio de reseΓ±as └── tourismService.ts # Servicios turΓ­sticos ``` **ApiClient Class**: ```typescript class ApiClient { - baseUrl: string - request(endpoint, options): Promise + get(endpoint): Promise + post(endpoint, data): Promise + put(endpoint, data): Promise + delete(endpoint): Promise + postForm(endpoint, data): Promise } ``` **CaracterΓ­sticas**: - Interceptores de request/response - Refresh token automΓ‘tico - Manejo centralizado de errores - Timeout configurable (30s) - Retry logic para 401 errors ### 4. Capa de ValidaciΓ³n ```typescript src/lib/validation.ts ``` **Schemas Zod**: - `loginSchema`: ValidaciΓ³n de login - `registerSchema`: ValidaciΓ³n de registro - `profileUpdateSchema`: ActualizaciΓ³n de perfil - `contactFormSchema`: Formularios de contacto - `reviewSchema`: ValidaciΓ³n de reseΓ±as - `searchSchema`: ValidaciΓ³n de bΓΊsquedas ## Flujo de Datos ### Flujo de AutenticaciΓ³n ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ SignIn │───────>β”‚ AuthContext │───────>β”‚ adminApi β”‚ β”‚ Form β”‚ submit β”‚ .login() β”‚ POST β”‚ /auth/loginβ”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β–Ό β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚<───────────────│ Backend β”‚ β”‚ JWT Token β”‚ API β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ localStorage β”‚ β”‚ - token β”‚ β”‚ - user data β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ### Flujo de Reservas ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Booking │───────>β”‚ useBooking │───────>β”‚ bookingApi β”‚ β”‚ Form β”‚ submit β”‚ hook β”‚ POST β”‚/reservationsβ”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β–Ό β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚<───────────────│ Backend β”‚ β”‚ Confirmation β”‚ API β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ TanStack β”‚ β”‚ Query β”‚ β”‚ Cache β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ## GestiΓ³n de Estado ### Estado Local (Component State) ```typescript const [formData, setFormData] = useState({...}); ``` **Uso**: Estado temporal de componentes individuales ### Estado Global (Context) ```typescript const { user, login, logout } = useAuth(); ``` **Uso**: Estado compartido entre mΓΊltiples componentes ### Estado del Servidor (TanStack Query) ```typescript const { data, isLoading } = useQuery({ queryKey: ['users'], queryFn: () => adminApi.getAllUsers() }); ``` **Uso**: Cache y sincronizaciΓ³n de datos del servidor ## Patrones de DiseΓ±o ### 1. Container/Presentational Pattern ```typescript // Container (lΓ³gica) const UsersContainer = () => { const { users, loading } = useAdminData(); return ; }; // Presentational (UI) const UsersList = ({ users, loading }) => { if (loading) return ; return
{users.map(...)}
; }; ``` ### 2. Compound Components Pattern ```typescript
Email
``` ### 3. Custom Hook Pattern ```typescript const useBooking = () => { const [bookings, setBookings] = useState([]); const createBooking = async (data) => {...}; return { bookings, createBooking }; }; ``` ### 4. Higher-Order Component (HOC) Pattern ```typescript const ProtectedRoute = ({ children }) => { const { isAuthenticated } = useAuth(); return isAuthenticated ? children : ; }; ``` ## Estrategia de Routing ### Estructura de Rutas ``` / # Landing page /sign-in # Login /sign-up # Registro /explore # ExploraciΓ³n pΓΊblica /listing-details/:id # Detalles de listado /dashboard # Dashboard principal (turista) /dashboard/admin # Panel de administraciΓ³n /dashboard/admin?tab=... # Tabs de administraciΓ³n /dashboard/hotel/* # Rutas hoteleras /dashboard/restaurant/* # Rutas de restaurante /dashboard/commerce/* # Rutas de comercio /dashboard/roles-permissions # GestiΓ³n de roles /dashboard/crm/* # CRM /dashboard/commissions/* # Comisiones ``` ### ProtecciΓ³n de Rutas ```typescript }> } /> ``` ## Optimizaciones de Performance ### Code Splitting ```typescript const AdminDashboard = lazy(() => import('./pages/AdminDashboard')); ``` ### Memoization ```typescript const MemoizedComponent = memo(ExpensiveComponent); const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]); const memoizedCallback = useCallback(() => doSomething(a, b), [a, b]); ``` ### Virtual Scrolling Para listas largas de datos (usuarios, reservas, etc.) ### Image Optimization - Lazy loading con `loading="lazy"` - Formatos modernos (WebP) - Responsive images ## Seguridad ### Medidas Implementadas 1. **ValidaciΓ³n de Inputs**: Todos los formularios usan Zod 2. **SanitizaciΓ³n**: PrevenciΓ³n de XSS 3. **HTTPS Only**: Todas las comunicaciones encriptadas 4. **JWT Tokens**: AutenticaciΓ³n stateless 5. **Refresh Tokens**: RotaciΓ³n automΓ‘tica 6. **CORS**: Configurado en backend 7. **Rate Limiting**: En endpoints crΓ­ticos ### Consideraciones de Seguridad ⚠️ **IMPORTANTE**: La verificaciΓ³n de roles actual es client-side. Para producciΓ³n se requiere: - Tabla `user_roles` separada en la base de datos - VerificaciΓ³n de permisos en cada endpoint del backend - Row Level Security (RLS) policies ## Escalabilidad ### PreparaciΓ³n para Escala 1. **ModularizaciΓ³n**: CΓ³digo organizado en mΓ³dulos independientes 2. **Lazy Loading**: Carga diferida de componentes 3. **API Caching**: TanStack Query con estrategias de cache 4. **CDN Ready**: Assets estΓ‘ticos optimizados 5. **Micro-frontends Ready**: Arquitectura permite separaciΓ³n futura ### MΓ©tricas de Performance - **First Contentful Paint**: < 1.5s - **Time to Interactive**: < 3.5s - **Bundle Size**: ~500KB (gzipped) ## Testing Strategy ### Unit Tests ```typescript describe('useAuth', () => { it('should login successfully', async () => { // test implementation }); }); ``` ### Integration Tests ```typescript describe('BookingFlow', () => { it('should complete booking', async () => { // test implementation }); }); ``` ### E2E Tests (Cypress/Playwright) ```typescript describe('Complete User Journey', () => { it('should allow user to make a reservation', () => { // test implementation }); }); ``` ## Monitoring y Observabilidad ### Logs - Console logs en desarrollo - Sentry/LogRocket en producciΓ³n ### Analytics - Google Analytics 4 - Custom events tracking - User behavior analysis ### Error Tracking - Error boundaries en componentes crΓ­ticos - Reportes automΓ‘ticos a Sentry ## Deployment Pipeline ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Git │───>β”‚ Build │───>β”‚ Test │───>β”‚ Deploy β”‚ β”‚ Commit β”‚ β”‚ (Vite) β”‚ β”‚ (Jest) β”‚ β”‚(Lovable) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ## Roadmap TΓ©cnico ### Corto Plazo (3 meses) - [ ] Implementar testing completo - [ ] Optimizar bundle size - [ ] Mejorar accesibilidad (WCAG 2.1 AA) - [ ] Implementar PWA completa ### Medio Plazo (6 meses) - [ ] Migrar a Server Components (React 19) - [ ] Implementar GraphQL - [ ] WebSockets para real-time - [ ] Backend propio (Node.js/NestJS) ### Largo Plazo (12 meses) - [ ] Micro-frontends architecture - [ ] Mobile apps (React Native) - [ ] AI/ML integration - [ ] Blockchain para pagos --- **Última actualizaciΓ³n**: 2025-01-12 **Mantenedores**: Equipo de Desarrollo Karibeo