unizar-30226-2019-07 / API

RESTful API for Selit
MIT License
1 stars 0 forks source link

Productos deseados: discusión #25

Open diegoroyo opened 5 years ago

diegoroyo commented 5 years ago

Abro este issue a modo de discusión, para un par de temas acerca de los productos deseados.

Productos deseados: estado

Para obtener el estado de un producto (en concreto, si un usuario lo tiene en su lista de deseados o no) hemos pensado dos formas:

  1. Juntar toda la funcionalidad en la misma petición: Los productos devueltos por las operaciones GET /products, GET /products/{product_id}... tienen un atributo in_wishlist que indique (true/false) si ese producto está o no en la lista del usuario que ha realizado la petición
  2. Hacer otra petición separada: Por ejemplo, a /users/{user_id}/wishes_products/{product_id} para comprobar si el producto product_id está en la lista del usuario user_id

Personalmente prefiero la primera opción, pero se puede hacer de ambas formas.

Productos deseados: identificador de usuario

Asumo que solamente el usuario que está logueado puede ver/añadir/quitar su lista de productos deseados. ¿Sería correcto crear la operación GET /users/me/wishes_products para recibir mi propia lista de deseados (a partir del token enviado)? De esta forma se elimina la necesidad de conocer mi propio user_id.

torvic98 commented 5 years ago

Si back-end (@victorpowah) está de acuerdo, la opción que aparenta ser más fácil para front-end es la primera:

Juntar toda la funcionalidad en la misma petición: Los productos devueltos por las operaciones GET /products, GET /products/{product_id}, etc. tienen un atributo in_wishlist que indique (true/false) si ese producto está o no en la lista del usuario que ha realizado la petición

En cuanto al segundo tema:

Asumo que solamente el usuario que está logueado puede ver/añadir/quitar su lista de productos deseados.

Sí, yo creo que la lista de deseos es privada de cada usuario.

Si bien nos encontramos de nuevo con el asunto del me. Personalmente sigo sin comprender cómo no podéis tener almacenado el user_id para usarlo en todo este tipo de peticiones. Estamos en tiempo de descuento, así que me da bastante igual los atajos que toméis en la API (como este) para facilitaros la vida. Si @victorpowah está de acuerdo, podéis crear /users/me como referencia al usuario logueado en cualquier circunstancia.

Notificadme por aquí cualquier decisión final.

victorpowah commented 5 years ago

El segundo tema se cumple y estoy de acuerdo con los punto 1 y 3. ¿Para el punto uno seria necesario las dos funciones? Y por ultimo, ¿como contabilizamos que se ha visitado un producto? @torvic98 @diegoroyo

diegoroyo commented 5 years ago

Respecto al me:

Si bien nos encontramos de nuevo con el asunto del me. Personalmente sigo sin comprender cómo no podéis tener almacenado el user_id para usarlo en todo este tipo de peticiones.

Está almacenado y se puede leer sin ningún problema, pero lo decía por evitar hacer pasos extra, que los veo innecesarios, a la hora de hacer operaciones con la lista de deseados ya que solamente tiene sentido hacerlas con el propio usuario. Si usar /me/wishes_products no es una buena práctica (no sé si lo es o no) podemos olvidarnos de hacerlo.


Y sobre los otros temas:

¿Para el punto uno seria necesario las dos funciones?

Si lo juntamos todo en la misma petición (devolver un atributo in_wishlist con el producto) no hace falta incluir la parte de /users/{user_id}/wishes_products/{product_id}, al menos con la funcionalidad que teníamos pensada en este momento para la aplicación. Pero mejor esperar a opiniones de más gente.

¿como contabilizamos que se ha visitado un producto?

Echale un vistazo a la issue #26

torvic98 commented 5 years ago

Si lo juntamos todo en la misma petición (devolver un atributo in_wishlist con el producto) no hace falta incluir la parte de /users/{user_id}/wishes_products/{product_id}, al menos con la funcionalidad que teníamos pensada en este momento para la aplicación. Pero mejor esperar a opiniones de más gente.

Consideraciones importantes

  1. El manejo de la lista de deseos (añadir/borrar productos) debería realizarse desde el endpoint específico que ya comentamos: PUT or DEL sobre el path /users/{user_id}/wishes_products/{product_id} o sobre el path /users/{user_id}/wishes_auctions/{auction_id}.

  2. ADICIONALMENTE, se puede añadir un atributo de SÓLO LECTURA a los JSON de métodos que devuelven productos, para no tener que cruzar la lista de productos con la lista de deseos en front-end sino en back-end (que es más sencillo).