Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Botón compartir por URL #1290

Closed
9 of 10 tasks
rgonzalezt opened this issue Apr 12, 2023 · 1 comment · Fixed by Program-AR/pilas-bloques-app#147
Closed
9 of 10 tasks

Botón compartir por URL #1290

rgonzalezt opened this issue Apr 12, 2023 · 1 comment · Fixed by Program-AR/pilas-bloques-app#147
Assignees

Comments

@rgonzalezt
Copy link
Contributor

rgonzalezt commented Apr 12, 2023

Depende de #1499

Front

  • Reemplazar el botón "Descargar" del editor por un botón compartir. Esto abre un modal.
  • El modal muestra el viejo botón descargar y un link con un botoncito de "copiar link" que copia el link al portapapeles.
  • Al abrirse el modal, se debe generar automáticamente el link de la siguiente forma: Pegarle al back diciendo que guarde el desafío. El back devuelve un OK con el nuevo ID. El link se forma concatenando urlDeLaApp/#/desafio/ID. Si estoy en Electron la URL de la app tiene que ser la página de Pilas Bloques de prod.
  • Si algo funcionó mal por cualquier otra razón, en lugar del label con el link y el botón, debe mostrarse un cartelito diciendo "no se puede generar el link para compartir. Por favor intentá de nuevo. Recordá que debés tener conexión a internet para hacerlo"
  • Hacer la ruta desafio/:id donde el id es el id para traerse el challenge del backend. (Ver Rutas)
  • Puede ser distinta la ruta, pero estaría bueno que todas las rutas para usar sean /desafío/. Puede ser por ejemplo desafio/guardado/:id.
  • tests (test de la generación de ID, test de cuando no hay internet, si hay ifs en las rutas, test de esto)

Back

  • Agregar la collection userChallenges, que guarda el json de Diseño de formato de archivo para importar #1277.
  • Endpoint userChallenge que con POST recibe el challenge, genera ID no existente en la base, y lo devuelve. Estaría copado generar IDs relativamente cortos, parecido al algoritmo de generación de meets de google meet, donde los ID tienen siempre un formato asociado.
  • Endpoint userChallenge/:id que con un GET busca y devuelve el challenge indicado.
  • Tests!

Pensando en como editar un desafio guardado

  • Si se importa un desafio desde un archivo, el desafio es nuevo (una nueva url).

  • Listado de desafios creados cuando un usuario esta loggeado.

  • El desafio guardado deberia saber el usuario que lo creo.

  • Parece que es necesario obligar a que este loggeado. De esta forma evitamos el problema de que la gente no loggeada no pueda editar desafios que crearon.

  • Cuando creo la url de un desafio siendo creado, esa url tiene que ser estatica. Cuando edite ese desafio la url tiene que seguir siendo la misma. No nos interesa guardar el historial de edicion de un desafio (como si fuesen commits).

  • Queremos que se puedan crear desafios sin compartir (crear la url) ? Parece que si.

  • Javi plantea 2 conceptos, uno de crear un nuevo desafio y otro remixear uno ya existente.

  • "Guardar y publicar es lo mismo?" Alf plantea que queremos simplificar el modelo, que sean la misma cosa. Que el boton se llame "Guardar y publicar", "ademas a ro le gustaria, es un nombe asertivo" -alf. Al hacerle click si se esta loggeado se hace eso, si no se tira un alert de que se tiene que loggear.

  • Seria raro que haya un boton de guardar y publicar y otro de compartir. El modal de compartir deberia tener el boton de guardar y publicar adentro? "Asi lo tiene google". Es raro que el boton de guardar y publicar este a 2 clicks

  • Queremos algo que indique si el desafio actual esta guardado?

  • Para otro issue: Que un usuario pueda crear su propio libro/coleccion de desafios


  • Hacer que no se muestre el link completo, cortarlo a un punto
  • Hacer un boton de copy to clipboard
    image
    image
@rgonzalezt rgonzalezt added this to the Post MVP milestone Apr 12, 2023
@asanzo asanzo changed the title Botón compartir Botón compartir por URL Apr 12, 2023
@asanzo
Copy link
Contributor

asanzo commented Apr 12, 2023

Me pregunto si el ID tiene que ser completamente random o si no podemos incluir algún tipo de información en ese ID. Por ejemplo un timestamp. La única razón sería tener algún tipo de info sólo mirando el ID, a la hora de hacer debugging.

Hmmm estuve perdiendo el tiempo con ChatGPT.

function generateChallengeID(): string {
     nowTimestamp: number =  Date.now() - Date.UTC(2023, 0, 1)
     return numToAlpha(nowTimestamp)
}

function numToAlpha(num: number): string {
  const mapping: string = 'abcdefghijklmnopqrstuvwxyz';
  const alpha: string[] = [];
  let remainingNum: number = num - 1;
  while (remainingNum >= 0) {
    alpha.push(mapping[remainingNum % 26]);
    remainingNum = Math.floor(remainingNum / 26) - 1;
  }
  return alpha.reverse().join('');
}

imagen

Genera Ids cortos que son básicamente un timestamp. Tarda 10 años en crecer 1 dígito, y si tenemos 1 sólo proceso backend, nunca colisiona. Sólo colisionaría si replicáramos los backend, y si tenemos muy mala suerte.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
No open projects
Status: Done
Development

Successfully merging a pull request may close this issue.

4 participants