|
| 1 | +Ponerle codigos de error al SSE para manejar el objeto en el worker y saber el estado de la sesión (puede ser útil para saber si estoy logueado o no) |
| 2 | +Cuando se inicia sesión, que se mande un mensaje al worker para que se conecte con SSE |
| 3 | +Es mejor ignorar el SSE en cuestiones de depuración porque tiene errores genéricos y se reconecta solo pase lo que pase excepto por |
| 4 | +errores de auth |
| 5 | + |
| 6 | +Usar el header 'last-event-id': '1', con una fecha para comparar con la colección de cambios, toda colección que tenga cambios entre la fecha y el momento actual será enviada |
| 7 | +con sse, y el worker hará peticiones http al server pidiendo lo que falte entre o tal vez lo sirva por el mismo sse, todavía no sé |
| 8 | + |
| 9 | +El sse antes de ir a la base de datos que verifique los permisos de esa persona a ver si puede obtener esa info |
| 10 | +luego que compare |
| 11 | + |
| 12 | + |
| 13 | +2 opciones: |
| 14 | + |
| 15 | +1 - JWT con todas las entidades |
| 16 | + -Se especifica en la url cuál quiero y el backend tendría que comprobar si coincide |
| 17 | + -Es mejor para dejar en cola productos y facturas a entidades diferentes |
| 18 | + -El mismo SSE podría mandarle cosas a varios |
| 19 | + |
| 20 | +2 - JWT con una sola entidad |
| 21 | + -No hace falta especificar en la url y no podría tener pestañas con entidades diferentes |
| 22 | + -No podría hacer el queue para los que se quedan sin conexión |
| 23 | + -Un SSE puede mandar una cosa |
| 24 | + |
| 25 | + |
| 26 | +Gana 1, y en el backend: |
| 27 | + |
| 28 | +Service worker vs worker genérico: |
| 29 | + |
| 30 | +1 - GW |
| 31 | + -Fácil para gestionar los SSE |
| 32 | + -Múltiples conexiones por pestaña pero como es http2 se multiplexa |
| 33 | + -Requiere tener la app abierta para actualizar información |
| 34 | +2 - SW |
| 35 | + -Más complicados de gestionar |
| 36 | + -Un solo SSE, no hace falta multiplexar |
| 37 | + -Actualizará información cuando no se esté usando la app |
| 38 | +Conclusión: |
| 39 | +Usar sync para actualizar toda la info cuando sea necesario, y el SSE para mantener la información en tiempo real |
| 40 | +Cuando la app se cierra que quede solo un SSE en el SW para notificaciones importantes (gastaría menos batería) |
| 41 | + |
| 42 | +INVESTIGAR!!!: Ver evento connect del serviceworker |
| 43 | + |
| 44 | +Se usará el SW para peticiones normales con sync |
| 45 | +También se usará un GW para los SSE |
| 46 | + |
| 47 | +Arquitectura microservicio: |
| 48 | + |
| 49 | +1 - Al conectar el SSE a la ruta correspondiente, se van a enviar las cookies (que correspondan a ese path) |
| 50 | + la cookie tiene el formato :entidad=timestamp |
| 51 | + el microservicio verificará que dentro del JWT la entidad exista y pueda operar (por horarios, permisos, etc ...) |
| 52 | + tomará el timestamp de la cookie y hará una query filtrando resultados entre el timestamp y "ahora" |
| 53 | + |
| 54 | +Microservicios |
| 55 | + -> Productos |
| 56 | + ->GET(SSE) |
| 57 | + ->POST |
| 58 | + ->PUT |
| 59 | + ->DELETE |
| 60 | + |
| 61 | +2 - Un solo servidor SSE en un worker y al abrir la app se hacen consultas a varios paths aprovechando |
| 62 | + la multipexación para actualizar los datos en tiempo real, luego se abre el SSE que va a traer información de la entidad |
| 63 | + Se emitirán eventos desde el SSE que correspondan a cada colección (productos, facturas, etc) |
| 64 | + |
| 65 | + |
| 66 | +Microservicios |
| 67 | + -> SSE |
| 68 | + -> Productos |
| 69 | + ->GET |
| 70 | + ->POST |
| 71 | + ->PUT |
| 72 | + ->DELETE |
| 73 | + |
| 74 | + Al abrir la pestaña y seleccionar una entidad sucederá lo siguiente: |
| 75 | + Verificar si hay conexión a internet, luego verificar si hay entidades en el sessionStorage |
| 76 | + Si no hay conexión ni sessionStorage: |
| 77 | + Decirle al usuario que necesita internet para inciiar sesión al menos por primera vez |
| 78 | + Si no hay conexión pero hay sessionStorage: |
| 79 | + Ofrecerle elegir la entidad trayendolas desde el localStorage con un botón o reintentar (NO utilizar SW sync) |
| 80 | + Si hay conexión: |
| 81 | + ->GET /signin |
| 82 | + ->Si es 200, mostrar entidades entonces vaciar por completo el localStorage y aplicar lo nuevo, |
| 83 | + ->Si es 402, mostrar pantalla de inicio de sesión |
| 84 | + ->Si es 416, mostrarle una burla |
| 85 | + Una vez elegida la entidad, |
| 86 | + ->Si hay internet, entonces se enviará al SW un background sync para actualizar info vieja (de esa entidad), |
| 87 | + una vez recibida la info, se conecta al SSE de entidad correspondiente |
| 88 | + ->Si no hay internet, también se hará el sync -DERP pwa vieja-, si hay un sse, se mata, así no queda en loop |
| 89 | + hasta que haya internet |
| 90 | + |
| 91 | + |
| 92 | + al enviar un mensaje al SW, se le deberá especificar la entidad para devolver lo que corresponde |
| 93 | + Al iniciar la app, enviar postmessage aclarando qué entidad se seleccionó para actualizar los datos que se van a usar |
| 94 | + |
| 95 | + *Se usará un SW para peticiones GET,POST,DELETE,PUT mediante sync al seleccionar la entidad y si hay conexión a internet. |
| 96 | + *Se usará un GW para los SSE que actualizen la DB en RT - una lástima no poder usar los sharedWorkers - |
| 97 | + |
| 98 | + ------------------------------------ |
| 99 | + |
| 100 | + |
| 101 | + Será jerarquía basada en componentes, según el plan, se editarán los permisos en el contrato para tener ciertos módulos |
| 102 | + ->Módulos |
| 103 | + ->Compra |
| 104 | + ->Venta |
| 105 | + ->Productos |
| 106 | + ->Depósito |
| 107 | + ->Estadísticas |
| 108 | + ->Contratos |
| 109 | + ->Configuración |
| 110 | + ->Entidades |
| 111 | + ->Ayuda |
| 112 | + ->Salir |
| 113 | + |
| 114 | + |
| 115 | +***EL SSE SOLO SUSCRIBIRÁ A LA COLECCIÓN QUE CORRESPONDA SEGÚN MI NIVEL DE AUTORIZACIÓN** |
| 116 | + |
| 117 | +Más adelante, implementar que la persona elija el sector donde trabaja |
| 118 | +esto es para filtrar stock según locación (para esto no hace falta SSE, se va a solicitar la info cuando sea necesaria) |
| 119 | + |
| 120 | + |
| 121 | +--------------------------------------------------------------------------------------------------------------------------------------------------- |
| 122 | + |
| 123 | +Seguir con clientes y medios de pago |
| 124 | + |
| 125 | +---------------------------------------------------------------------------------------------------------------------------------------------------- |
| 126 | + |
| 127 | + |
| 128 | + |
| 129 | + |
| 130 | + |
| 131 | +Crear una carpeta api, proxy, static y separar redis de los microservicios y ponerlo en bbdd |
| 132 | + |
| 133 | +mover config a api |
| 134 | +mover traefik a proxy |
| 135 | + |
| 136 | +Mover todo al mismo nivel, quedaría api, proxy, static, databases, monitoring |
| 137 | + |
| 138 | +Hacer un algoritmo que escuche al SIGTERM |
| 139 | + |
| 140 | +.. |
| 141 | + |
| 142 | +Volver a poner la carga de componentes asíncrona |
| 143 | + |
| 144 | +componente para comprobar compatibilidad de funciones, navegador, etc .. |
| 145 | +componente para limpiar o editar toda la configuración de la aplicación |
| 146 | +componente navegación con permisos |
| 147 | + |
| 148 | + |
| 149 | +Poner botón salir en varios componentes en caso de error |
| 150 | + |
| 151 | + |
| 152 | +Modificar precio, hacer que acepte |
0 commit comments