LatamQChallenge: Streamer vs Streamer

Desgloso la lógica a aplicar para la funcionalidad de Streamer vs Streamer para el LatamQChallenge

hace 2 meses   •   3 min de lectura

Por Andrés Tuñón

Después de un mes complicado adaptándome a nuevos flujos de trabajo (aún lo hago) retomo el proyecto de LatamQChallenge, esta vez se trata de detectar cuando los streamers están en un mismo juego; ya sea como compañeros o adversarios.

Esta es una de las funcionalidades que menciono en el post relacionado al proyecto:

LatamQChallenge: Lógica y Arquitectura
Termino de analizar las funcionalidades y defino las reglas del negocio.

Requisito

Debo ser capaz de propagar el estado de "versus" mostrando los streamers que se enfrentan o son compañeros en una partida.

Recursos y Lógica

Para detectar los estados debo utilizar el API de Riot, hay varios servicios que proveen información acerca de los juegos.

Servicio de matches
Servicio de partidas

Primero pensé en el servicio de partidas; le envías el id de un jugador y te devuelve sus últimas partidas. También tiene unos query params para enviarle el rango de fecha y paginado.

Respuesta del servicio de partidas
Respuesta del servicio de partidas

Lo primero que se me ocurrió fue ir guardando los ids y revisar si se repiten con otro jugador. Supongo que es una opción, pero hay 2 fallas:

  • No puedo saber si el streamer está jugando actualmente
  • Debo realizar una lógica para ir "tachando" los ids que he verificado antes

Sería divertido hacer una lógica así; pero, mientras revisaba el API me encontré un servicio mucho mejor, realmente me interesa:

  • ¿El streamer está jugando actualmente?
  • Si está jugando, ¿Está jugando contra o en el equipo de algún otro streamer?

Este servicio es el de espectador:

Servicio de espectador
Servicio de espectador

El servicio retorna la información de la partida actual y en caso contrario retorna 404 Not Found.

La parte de saber si son compañeros o enemigos sería analizando la información que me da de la partida:

Respuesta de servicio de espectador
Respuesta de servicio de espectador

Hay 10 participantes (prefiero no mostrar su info), 5 tienen un id de equipo de 100 y los otros 5 tienen un id de equipo 200.

Seria cuestión de buscar el resto de streamers por si se encuentran en la partida; si es así, compararlo con el equipo del streamer y guardarlo en Firestore en una tabla.

API Polling

Este servicio debe ejecutarlo múltiples veces en un intervalo de tiempo corto para poder mantener fresca la información. Esto desencadena 3 casos claros:

  1. Apenas inicia la partida: No va a haber registros por lo tanto es un simple INSERT a una tabla.
  2. Es segunda vez que se valida la misma partida: Debido a este caso debo guardar el id de la partida y asegurarme de que no exista previamente en la tabla.
  3. Se acabó la partida: Este caso ocasiona que también guarde el id del jugador; para que al recibir un 404 al llamar el servicio, borrar todos los registros del jugador en la tabla.

Luego de eso al estar el cliente conectado  a Firebase recibiría la información al instante.

Corre la voz

Sigue leyendo