[{"data":1,"prerenderedAt":402},["ShallowReactive",2],{"navigation_docs":3,"-referencia-arquitectura":132,"-referencia-arquitectura-surround":397},[4,24,56,80,113],{"title":5,"path":6,"stem":7,"children":8},"Getting Started","\u002Fgetting-started","1.getting-started",[9,12,16,20],{"title":10,"path":6,"stem":11},"Primeros pasos","1.getting-started\u002Findex",{"title":13,"path":14,"stem":15},"Buscar servicios","\u002Fgetting-started\u002Fbuscar-servicios","1.getting-started\u002Fbuscar-servicios",{"title":17,"path":18,"stem":19},"Crear cuenta","\u002Fgetting-started\u002Fcrear-cuenta","1.getting-started\u002Fcrear-cuenta",{"title":21,"path":22,"stem":23},"Preguntas frecuentes","\u002Fgetting-started\u002Fpreguntas-frecuentes","1.getting-started\u002Fpreguntas-frecuentes",{"title":25,"path":26,"stem":27,"children":28},"Guias","\u002Fguias","2.guias",[29,32,36,40,44,48,52],{"title":30,"path":26,"stem":31},"Guías de uso","2.guias\u002Findex",{"title":33,"path":34,"stem":35},"Cuenta de empresa","\u002Fguias\u002Fcuenta-empresa","2.guias\u002Fcuenta-empresa",{"title":37,"path":38,"stem":39},"Favoritos","\u002Fguias\u002Ffavoritos","2.guias\u002Ffavoritos",{"title":41,"path":42,"stem":43},"Horarios","\u002Fguias\u002Fhorarios","2.guias\u002Fhorarios",{"title":45,"path":46,"stem":47},"Reviews y calificaciones","\u002Fguias\u002Freviews","2.guias\u002Freviews",{"title":49,"path":50,"stem":51},"Servicios","\u002Fguias\u002Fservicios","2.guias\u002Fservicios",{"title":53,"path":54,"stem":55},"Sucursales","\u002Fguias\u002Fsucursales","2.guias\u002Fsucursales",{"title":57,"path":58,"stem":59,"children":60},"Referencia","\u002Freferencia","3.referencia",[61,64,68,72,76],{"title":62,"path":58,"stem":63},"Referencia técnica","3.referencia\u002Findex",{"title":65,"path":66,"stem":67},"API del backend","\u002Freferencia\u002Fapi-backend","3.referencia\u002Fapi-backend",{"title":69,"path":70,"stem":71},"App mobile","\u002Freferencia\u002Fapp-mobile","3.referencia\u002Fapp-mobile",{"title":73,"path":74,"stem":75},"Arquitectura general","\u002Freferencia\u002Farquitectura","3.referencia\u002Farquitectura",{"title":77,"path":78,"stem":79},"Glosario","\u002Freferencia\u002Fglosario","3.referencia\u002Fglosario",{"title":81,"path":82,"stem":83,"children":84},"Changelog","\u002Fchangelog","4.changelog",[85,87,101],{"title":81,"path":82,"stem":86},"4.changelog\u002Findex",{"title":88,"path":89,"stem":90,"children":91},"Backend — Changelog","\u002Fchangelog\u002Fbackend","4.changelog\u002Fbackend\u002Findex",[92,93,97],{"title":88,"path":89,"stem":90},{"title":94,"path":95,"stem":96},"v0.0.1","\u002Fchangelog\u002Fbackend\u002Fv0.0.1","4.changelog\u002Fbackend\u002Fv0.0.1",{"title":98,"path":99,"stem":100},"v0.0.2","\u002Fchangelog\u002Fbackend\u002Fv0.0.2","4.changelog\u002Fbackend\u002Fv0.0.2",{"title":102,"path":103,"stem":104,"children":105},"Mobile — Changelog","\u002Fchangelog\u002Fmobile","4.changelog\u002Fmobile\u002Findex",[106,107,110],{"title":102,"path":103,"stem":104},{"title":94,"path":108,"stem":109},"\u002Fchangelog\u002Fmobile\u002Fv0.0.1","4.changelog\u002Fmobile\u002Fv0.0.1",{"title":98,"path":111,"stem":112},"\u002Fchangelog\u002Fmobile\u002Fv0.0.2","4.changelog\u002Fmobile\u002Fv0.0.2",{"title":114,"path":115,"stem":116,"children":117},"Empresa","\u002Fempresa","5.empresa",[118,120,124,128],{"title":114,"path":115,"stem":119},"5.empresa\u002Findex",{"title":121,"path":122,"stem":123},"Disclaimer","\u002Fempresa\u002Fdisclaimer","5.empresa\u002Fdisclaimer",{"title":125,"path":126,"stem":127},"Roadmap","\u002Fempresa\u002Froadmap","5.empresa\u002Froadmap",{"title":129,"path":130,"stem":131},"Sobre nosotros","\u002Fempresa\u002Fsobre-nosotros","5.empresa\u002Fsobre-nosotros",{"id":133,"title":73,"body":134,"description":390,"extension":391,"links":392,"meta":393,"navigation":394,"path":74,"seo":395,"stem":75,"__hash__":396},"docs\u002F3.referencia\u002Farquitectura.md",{"type":135,"value":136,"toc":382},"minimark",[137,141,145,150,161,165,177,182,207,212,232,237,267,271,278,282,308,313,351,355,358,362,369,372],[138,139,73],"h1",{"id":140},"arquitectura-general",[142,143,144],"p",{},"ServiciosApp está compuesto por tres grandes componentes que trabajan juntos para ofrecer la experiencia completa.",[146,147,149],"h2",{"id":148},"diagrama-general","Diagrama general",[151,152,157],"pre",{"className":153,"code":155,"language":156},[154],"language-text","┌──────────────┐     ┌──────────────┐     ┌──────────────┐\n│   Mobile     │     │     Web      │     │   Documentación\n│  (Android)   │     │  (Frontend)  │     │   (Docus)    │\n│  (iOS)       │     │              │     │              │\n└──────┬───────┘     └──────┬───────┘     └──────────────┘\n       │                    │\n       └─────────┬──────────┘\n                 │ API HTTP\n                 ▼\n        ┌────────────────┐\n        │    Backend      │\n        │  (Spring Boot)  │\n        │  Hexagonal +    │\n        │  CQRS           │\n        └───────┬────────┘\n                │\n        ┌───────▼────────┐\n        │   PostgreSQL    │\n        │   (Base datos)  │\n        └────────────────┘\n","text",[158,159,155],"code",{"__ignoreMap":160},"",[146,162,164],{"id":163},"backend","Backend",[142,166,167,168,172,173,176],{},"El backend está desarrollado con ",[169,170,171],"strong",{},"Spring Boot 3.4"," y ",[169,174,175],{},"Java 21",", siguiendo una arquitectura hexagonal con CQRS estricto.",[142,178,179],{},[169,180,181],{},"Tecnologías principales:",[183,184,185,189,192,195,198,201,204],"ul",{},[186,187,188],"li",{},"Spring Boot 3.4.4",[186,190,191],{},"Spring Security con JWT",[186,193,194],{},"PostgreSQL con Flyway (migraciones)",[186,196,197],{},"QueryDSL para consultas tipadas",[186,199,200],{},"Documentación OpenAPI (Swagger)",[186,202,203],{},"Azure Storage para imágenes",[186,205,206],{},"Testcontainers para pruebas de integración",[142,208,209],{},[169,210,211],{},"Arquitectura:",[183,213,214,220,226],{},[186,215,216,219],{},[169,217,218],{},"Domain",": Modelos de negocio y puertos (interfaces)",[186,221,222,225],{},[169,223,224],{},"Application",": Casos de uso, comandos y queries",[186,227,228,231],{},[169,229,230],{},"Infrastructure",": Adaptadores web (REST), repositorios, servicios externos",[142,233,234],{},[169,235,236],{},"Modelos de dominio principales (~35 entidades):",[183,238,239,242,245,248,251,254,256,258,261,264],{},[186,240,241],{},"Usuarios, autenticación y perfiles",[186,243,244],{},"Empresas y usuarios de empresa",[186,246,247],{},"Sucursales e imágenes",[186,249,250],{},"Servicios, canales de servicio y precios",[186,252,253],{},"Horarios (sucursales y canales)",[186,255,37],{},[186,257,45],{},[186,259,260],{},"Categorías y atributos de búsqueda",[186,262,263],{},"Notificaciones",[186,265,266],{},"Estadísticas de interacción",[146,268,270],{"id":269},"mobile","Mobile",[142,272,273,274,277],{},"La aplicación móvil está desarrollada con ",[169,275,276],{},"Expo 54 + React Native 0.81 + TypeScript",".",[142,279,280],{},[169,281,181],{},[183,283,284,287,290,293,296,299,302,305],{},[186,285,286],{},"Expo SDK 54",[186,288,289],{},"React Native 0.81",[186,291,292],{},"TypeScript con tipado estricto",[186,294,295],{},"NativeWind (Tailwind CSS para React Native)",[186,297,298],{},"Zustand para estado global",[186,300,301],{},"Zod para validación de esquemas",[186,303,304],{},"React Navigation (Expo Router)",[186,306,307],{},"Axios para peticiones HTTP",[142,309,310],{},[169,311,312],{},"Arquitectura en capas:",[183,314,315,321,327,333,339,345],{},[186,316,317,320],{},[169,318,319],{},"Schemas",": Esquemas de API y dominio con validación Zod",[186,322,323,326],{},[169,324,325],{},"Services",": Lógica de negocio y comunicación HTTP",[186,328,329,332],{},[169,330,331],{},"Mappers",": Transformaciones entre DTOs y modelos de dominio",[186,334,335,338],{},[169,336,337],{},"Hooks",": Lógica de datos reutilizable",[186,340,341,344],{},[169,342,343],{},"Controllers",": Coordinación de UI y vista",[186,346,347,350],{},[169,348,349],{},"Components",": Componentes reutilizables",[146,352,354],{"id":353},"web-frontend-de-usuarios","Web (Frontend de usuarios)",[142,356,357],{},"La versión web para usuarios está en desarrollo, compartiendo la misma API del backend.",[146,359,361],{"id":360},"documentación","Documentación",[142,363,364,365,368],{},"Este sitio de documentación está construido con ",[169,366,367],{},"Nuxt 4 + Docus"," y todo el contenido está en archivos Markdown.",[370,371],"hr",{},[142,373,374,378,379],{},[375,376,377],"a",{"href":58},"← Volver a referencia"," · ",[375,380,381],{"href":66},"Siguiente: API del backend →",{"title":160,"searchDepth":383,"depth":383,"links":384},2,[385,386,387,388,389],{"id":148,"depth":383,"text":149},{"id":163,"depth":383,"text":164},{"id":269,"depth":383,"text":270},{"id":353,"depth":383,"text":354},{"id":360,"depth":383,"text":361},"Visión general de la arquitectura de ServiciosApp","md",null,{},true,{"title":73,"description":390},"gaD59NRjqL7hIfNYnad-PvCsfKt62g9y6iq-F0HHSEA",[398,400],{"title":69,"path":70,"stem":71,"description":399,"children":-1},"Arquitectura y estructura de la aplicación móvil de ServiciosApp",{"title":77,"path":78,"stem":79,"description":401,"children":-1},"Términos del dominio de ServiciosApp",1783141866645]