Actualmente, cuando subimos un archivo a nuestro servicio de almacenamiento, si este ya existía (si el usuario tenía ya uno con ese mismo nombre), se actualizaba borrando el anterior.
Sin embargo, nuestro esquema actual nos permite tener más de un fichero con el mismo nombre para un mismo usuario, ya que, si ejecutamos la siguiente consulta:
SELECT id, updated_at, name FROM files WHERE name = 'f1' AND owner = 'testuser1' ORDER BY id DESC;
Obtenemos el siguiente resultado:
Podemos, entonces, implementar un sencillo control de versiones haciendo que, cuando se suba un fichero, este siempre se guarde; es decir, nunca busque antes si el fichero ya existe o no (eliminamos la opción de poder "actualizar" un fichero).
Deberemos modificar entonces las consultas de obtener los detalles de uno para que, en vez de recibir un único fichero, reciba todas las versiones de este; y el listado general, que reciba sólo las últimas versiones de cada fichero.
El borrado seguiría siendo el mismo: borrado un fichero, borradas todas sus versiones.
Las rutas del archivo deberán también ser actualizadas, haciendo que:
/files/:file devuelva los metadatos de la última versión.
/files/:file/download descargue la última versión.
/files/:file/versions devuelva los metadatos de todas las versiones.
/files/:file/versions/:version devuelva los metadatos de la versión seleccionada.
/files/:file/versions/:version/download descargue la versión seleccionada.
En el cliente, deberemos de añadir una opción para poder descargar diferentes versiones de un archivo (¿transfer version?) en este. Una vez seleccionado el archivo, obtendríamos las versiones del mismo y entonces seleccionaríamos cuál querríamos descargar.
Condiciones de satisfacción
[x] Añadir y modificar las nuevas operaciones DAO.
[x] Añadir y modificar los nuevos servicios.
[x] Conectar los nuevos endpoint con dichos servicios.
[x] Implementar descarga de versiones desde el cliente.
Descripción
Actualmente, cuando subimos un archivo a nuestro servicio de almacenamiento, si este ya existía (si el usuario tenía ya uno con ese mismo nombre), se actualizaba borrando el anterior.
Sin embargo, nuestro esquema actual nos permite tener más de un fichero con el mismo nombre para un mismo usuario, ya que, si ejecutamos la siguiente consulta:
Obtenemos el siguiente resultado:
Podemos, entonces, implementar un sencillo control de versiones haciendo que, cuando se suba un fichero, este siempre se guarde; es decir, nunca busque antes si el fichero ya existe o no (eliminamos la opción de poder "actualizar" un fichero).
Deberemos modificar entonces las consultas de obtener los detalles de uno para que, en vez de recibir un único fichero, reciba todas las versiones de este; y el listado general, que reciba sólo las últimas versiones de cada fichero.
El borrado seguiría siendo el mismo: borrado un fichero, borradas todas sus versiones.
Las rutas del archivo deberán también ser actualizadas, haciendo que:
/files/:file
devuelva los metadatos de la última versión./files/:file/download
descargue la última versión./files/:file/versions
devuelva los metadatos de todas las versiones./files/:file/versions/:version
devuelva los metadatos de la versión seleccionada./files/:file/versions/:version/download
descargue la versión seleccionada.En el cliente, deberemos de añadir una opción para poder descargar diferentes versiones de un archivo (¿
transfer version
?) en este. Una vez seleccionado el archivo, obtendríamos las versiones del mismo y entonces seleccionaríamos cuál querríamos descargar.Condiciones de satisfacción