Diario sobre app web de digitalización de menús (Java + Angular + Mongo)

bornex

27-Mayo-2020

Hoy no hemos tenido ningún bug reseñable, aunque estamos teniendo algunos problemas con algunos usuarios que no confirman su correo y no pueden acceder y hemos descubierto las dos razones:

1) Los correos de confirmación de email en algunos casos como Outlook llegan a la carpeta de correo no deseado y hay usuarios que ni siquiera saben que esto existe.

2) Cuando el usuario hace click en el enlace del email y se le redirige al home, el alert Verde qué dice "Correo confirmado" no se ve correctamente, con lo que el usuario no sabe que lo ha confirmado.

Tenemos planeado cambiar el tema del alert pero lo que no sabemos que hacer es con el tema del correo deseado. Veremos a ver cómo podemos hacer para que no lleguen a la carpeta de spam, ya que, estamos usando SendGrid que pensaba que no se iban a meter ahí pero bueno.

Por otro lado, hemos integrado Cloudinary para subir fotos. Se han creado el servicio web para subir una foto del negocio y para subir fotos a cada plato.

En cuanto al frontend, estamos trabajando en la zona de perfil de usuario para que puedan cambiar la contraseña y el nombre del restaurante.

Para mañana

  • Acabar un par de servicios web para añadir teléfono de contacto del restaurante e info.
  • Empezar con el tema de las cartas en varios idiomas.
  • Seguir con el perfil de usuario y añadir que puedan subir la foto del restaurante y que aparezca al visitar el menú.
bornex

Bueno ayer fue otro día de programar a full y sobretodo de calentarme la cabeza con Datadog.

28-Mayo-2020

Ayer modifiqué la API para introdudir un servicio nuevo para modificar la información de un negocio, además le hemos añadido imagen, teléfono e info al modelo. Esto es una de las cosas que nos llevan pidiendo los usuarios desde el día 1 y a nivel de backend ya esta todo listo. He borrado algunos otros servicios que no tenían mucho sentido y me he quitado código del medio.

Estoy un poco rayado con el testing, ya que, estoy viendo que no se si me renta hacer los tests de integración o hacer los tests unitarios mockeando todo o ambas cosas. Tengo algunas refactorizaciones pendientes y algunos cambios. Otra de las cosas que estoy rayao es en como estructurar los paquetes, los he dividido en 3: application (todo lo relacionado con temas de aplicación: REST, configs, etc...), domain (donde se encuentra el modelo y la lógica de negocio) e infrastructure (donde pongo todo lo relacionado con third parties: mongo, vertx, saas, etc...). El problema viene que por ejemplo tengo algunos controladores que exponen algunos servicios que son públicos (no necesitan auth) y otro que son con auth. Lo tengo todo un poco organizado por "feature package" pero realmente no. Al final se me han quedado los controladores bastante repartidos y no se si queda muy claro donde verlos (aunque bueno para los docs tengo swagger).

Sigo con el tema del monitoring de la aplicación, quería probar Datadog y les enviamos un correo pidiendoles una cuenta premium (al ser un proyecto open source sin ánimo de lucro, a ver si colaba) y nos contestaron diciendo que tenían un trial de 14 días que lo probaramos y que luego podíamos seguir con la cuenta free que te daban monitoring hasta 5 servers. Por ahora nos vale y para hacer monitoring de la base de datos y de la JVM nos vale. Ayer después de desarrollar el servicio web para cambiar la info de un negocio me puse a integrarlo y me tiré casi toda la tarde para sacarlo, al final son 3 mierdas que podéis ver en el proyecto (por si a alguno le interesa, me puede preguntar).

Seguimos teniendo muchísimos problemas con la confirmación del correo, la gente no lo confirma e intenta entrar en la aplicación sin éxito. Estamos pensando en como dejar claro que deben confirmar su correo con más feedback a la hora del registro.

Estamos trabajando en el profile del usuario para que pueda utilizar el servicio web nuevo de cambiar la info del negocio y el de cambiar la contraseña de la cuenta.

Hoy voy a empezar con el desarrollo del OCR y a ver que tal va, no estoy muy optimista, es más, creo que voy a desarrollarlo y no va a llegar a ver la luz nunca, pero bueno. Ojalá vaya bien.

2 respuestas
s4suk3

#1 tenéis estrategia de implantación? no crees que llegais tarde?

2 respuestas
bornex

#33 ¿Qué? xD

1 respuesta
kidandcat

#33 Esto es un proyecto open source, no lucrativo, y además ya tienen clientes funcionando. La estrategia típica de proyectos open source es el boca a boca.

1
Camp1

#32 Para estructurar los paquetes yo veo más claro organizarlo por conceptos de negocio y una vez dentro ya lo divides en domain, infrastructure y application. Un concepto de negocio sería por ejemplo customer o menu. En cuanto a conceptos que son compartidos, como en tu caso los eventos de dominio, puedes crear un package para este tipo conceptos al iguales que harías para otro.

Por otro lado felicitarte por el curro y sobre todo por compartirlo con la comunidad, me encanta leer el avance del proyecto, los problemas y las soluciones.

2 respuestas
s4suk3

#34 nada simplemente que buscando un poco por facebook hay muchísimas apps de este estilo

1 respuesta
Amazon

Yo sólo quiero comentar que es "Grosso modo", no "A grosso modo". Me divertí mucho leyendo los anglicismos y tal. Suerte con el proyecto.

1 respuesta
bornex

#36 vale, me mola como dices, voy a probarlo a ver que tal queda. Por otro lado, gracias por el comentario :)
#37 Ah si, ya han salido un huevo, la nuestra es una más, simplemente la estamos haciendo por diversión y para aumentar nuestro portfolio/cv.
#38 ¡Gracias! xD

JuAn4k4

#32 Para tener emsils verificados: Crear cuenta te redirige a una página de revisa tu email. si el user entra sin verificar o bien los reenvías a una pagina de "necesitas verificar tu email para continuar" o les pones un warning en la app y les limitas las cosas que pueden hacer

bornex

1-Junio-2020

La feature del OCR la hemos deshechado por ahora, tenía una solución funcionando pero no hemos sabido como encajarla a nivel de frontend y creemos que no merece la pena pegarnos el trabajo en esto cuando hay otras cosas que van a ser más útiles para el usuario.

Hemos arreglado el alert verde que le aparecía al usuario cuando confirmaba su correo electrónico, ahora se muestra en la cabecera. Esto da feedback directo al usuario de lo que ha pasado al pulsar el enlace que le llega por correo y por ahora (todo el finde) no hemos tenido ningún problema de usuarios que no se pueden registrar.

Voy a empezar con la parte backend que comentó #18, sobre los menús del día, ya que, nos lo están pidiendo bastante.

A nivel de frontend, seguimos trabajando en el perfil del usuario para permitirle cambiar la información de un negocio y también se esta trabajando en el forgot password.

Se ha unido al proyecto un amigo mio frontend, y ya somos tres en el equipo.

Para hoy

Quiero plantear el modelo de los menús del día, ya que a priori no se como voy a modelarlo, o bien con un modelo nuevo que sea "DailyMenu" o con el modelo de Menu y con las secciones ya prehechas. ¿Se os ocurre alguna idea?

1 respuesta
JuAn4k4

#41 ¿ Tus cartas no tienen secciones ? Para mi no dejan de ser algo muy similar, solo que en los menús el precio está en el Menú entero y cada plato lleva suplemento. Mientras que en la carta los precios van por plato (o por sección en algunos que he visto).

Es decir, son 3 niveles de precios:

Menú
Sección
Plato

El menú puede llevar precio, el plato puede llevar precio/suplemento, la sección puede llevar precio, y ya decides tu como gestionarlo

Eso sería una forma de hacerlo genérico.

Set Menu = { name: "Daily Menu", price: 10€ sections=[.. { name: "Primeros",  dishes= [ { name: "Paella",  supplement: 2€, alergens: [..] }, { name: "Segundos", ... ], ....]

Otra forma sería hacerlo separado como Set Menu vs Menu

1 respuesta
babri

#36 yo le meto una carpeta Shared como si fuera un concepto y dentro las 3 capas.

1 1 respuesta
Camp1

#43 es exactamente lo que hago

7 días después
bornex

¡Buenas! Disculpad por no haberme pasado por aquí en una semana, han sido unas semanas de locura tanto en el proyecto como en el trabajo y al final lo he ido dejando y nunca he encontrado hueco.

Estamos un poco flojos en el frontend, así que, me he puesto un poco a tirar de ciertas tareas que había pendientes de frontend para poder ir sacando cosas palante, la verdad es que mis conocimientos frontend son limitados pero al final me he apañao, tengo que decir que viniendo de vuejs (tengo algo de exp con vue), angular me parece super verbose, entre ellas destacamos:

  • Ahora los restaurantes pueden subir una foto de la carta, esto agiliza muchísimo la creación de menús (no hay que estar picando plato a plato). Esta feature nos la llevan pidiendo desde hace tiempo.
  • Ahora los restaurantes pueden subir fotos de los platos. Hemos hecho release ahora mismo 9-Junio-2020
  • Ahora los restaurantes pueden poner un plato como "No Disponible" y ya no se muestra al escanear el QR y acceder a la carta. Otra de las features que nos llevan pidiendo semanas.
  • Ya no hace falta confirmar el email cuando un restaurante se registra. Hemos tenido tantísimos problemas con esto (sobretodo por los correos que estaban llegando a la carpeta de correo no deseado en outlook) que al final hemos decidido quitarlo.
  • Se ha creado una página de "sobre nosotros" para darnos un poco de visibilidad (:P).
  • Se ha modificado el home un poco para que la primera impresión sea algo más profesional.

Para hoy

Tengo pensado empezar cuanto antes lo de la creación de multiples cartas y la carta del día. Creo que lo voy a modelar de la forma que #42 a propuesto, así podemos luego extenderlo de muchas formas.

Datos

A día de hoy, tenemos más de 330 restaurantes registrados y una media de 1.5k de visitas diarias, los picos son bastante predecibles: a la hora de comer y cenar mayormente. El VPS que tenemos en OVH de 2 cores tira de sobra con la app y no hemos superado nunca más del 20% del uso de la máquina, que lo alcanzamos sobretodo cuando hacemos una nueva release.

1 respuesta
kidandcat

#45 Parece que os va genial!, mucho ánimo para seguir así!

Lo de los emails a spam, si en algún momento os da por intentarlo de nuevo, mándame un mp y te explico lo que hay que hacer para que no vayan a spam.

Por otro lado, ya que tenéis tantos clientes, os recomiendo que os aseguréis de tener un backup activo, sobre todo de la base de datos.

1 respuesta
bornex

#46 ¡gracias tío! La verdad que los números y los correos diarios nos animan a seguir palante. Los backups los estoy haciendo con un cron puerco y mongodump, lo que pasa que los guardo en el server y luego los descargo y lo subo a Google Drive xD

Son dumps de menos de 10 megas así que no son na realmente, pero me gustaría automatizar todo el proceso y subirlos a un s3, pero la pasta es la pasta.

1 respuesta
wdaoajw

#47 10megas en S3 entra en el free tier de aws

1 respuesta
kidandcat

OVH tiene servicio de backups automatizados para los VPS: https://www.ovhcloud.com/es-es/vps/options/
Son 3€ al mes, pero bueno, tampoco es dinero creo yo

1 respuesta
bornex

#48 No sabía esto xD, pues entonces voy a probar a meterlo y una cosa menos que me quito de en medio para hacerlo de forma manual. La verdad es que he metido ya unos 5 o 6 third parties en la app (para monitoring, imágenes y demás) y me esta empezando a asustar el día que lleguemos al límite y haya que pasar por caja.

#49 Este lo tenemos mirado, a unas malas cuando veamos que estoy sigue creciendo sin parar tendremos que tener algo como esto si vamos a tirar de nuestro bolsillo, ya que, un s3 seguramente nos salga más caro.

1 respuesta
MTX_Anubis

#50 Pero te ha dado por mirar los precios de s3 para decir que es más caro? xDDDD

Cuesta 0.02€ GB/mes el estándar. Ya si te vas a acceso poco recuente pues 1 centimo y a glazier y demás menos aún.

https://aws.amazon.com/es/s3/pricing/

1 respuesta
bLaKnI

#51 Joer... pues es casi residual no?

1 respuesta
MTX_Anubis

#52 Hombre, es un servicio de almacenamiento, si fuera caro nadie lo usaría. El coste, más que en el alamacenamiento está en la transferencia.

PAra uso propio, backups y cosas así (ficheros que no tienen mucho uso) pues es despreciable, cuando empiezas a tener Teras y Teras y millones de accesos mensuales pues ya no lo es tanto xD.

4 meses después
r2d2rigo

Hoy me he topado con esto y me he acordado de este post: https://comidalacarta.com/