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