Saltar al contenido principal

Attachments

Ver en Git


Attachments Labores

Estas apis son para labores y se deberian deprecar

/api/attachments POST: Necesita la imagen (file) y un UUID (uuid).

ej:

uuid:80283bad-16e4-4f56-97df-a6e2fc8b8a62 file: (binary) source: {"feature":"SIEMBRA", "id":2}

/api/attachments?uuid= GET: Se pregunta por UUID. Es así porque si lo hago por ID puede scrapear todos los datos. Para que le usuario conozca el UUID tiene que tener permiso a la funcionalidad que lo usa (Registro de Campaña por ejemplo)

/api/attachments?uuid= DELETE: Manda a ese UUID a la papelera

/api/attachments/thumbnails?uuid= GET: Te envía una imagen reducida si corresponde. Si es un PDF y cosas así no devuelve nada

/api/attachments/trash GET: Te muestra TODOS tus archivos de la papelera

/api/attachments/trash DELETE: Vacía TODA la papelera (la entrada en DB queda pero los archivos en si se borran. Irrecuperable)

/api/attachments/trash?uuid= DELETE: Lo mismo que arriba pero solo para un archivo, por si no quiere vaciar toda la papelera

/api/attachments/trash/restore?uuid= POST: Restaura un archivo de la papelera

Attachments V2

La idea es tener apis generica para que los features que necesiten subir archivos no tenga que implementar logico de guardado y obtencion de archivos.
Lo que tiene que implementar cada features es la logica de permisos
Las apis estan en Aurapi

Apis internas

Solo accesibles dentro de la vpn

  • /services/attachments? uuid GET: Devuelve una url de S3 para acceder al archivo, tiene un tiempo de expiracion.
  • /services/attachments? uuid entity_id DELETE: Borra la relacion con la entidad, en caso que no quede relacionado a ninguna tambien borra el archivo (Base de datos), el archivo queda en s3
  • /services/attachments POST: Esta api registra en la base de datos que se va a subir un archivo y las entidades a las que se relaciona(la entidad tienen que ser del mismo tipo), y devuelve url y parametros para poder subir el archivo

params

    "uuid": uuid, // uuid del archivo a subir
"entity_type": str, // Feature al cual pertence el archivo, tiene que estar configurado en la base de datos
"entities_id": list[int], // Id del registro en la base de datos al cual pertenece el archivo
"user_id": int, //

resp:

    {
"url": str,
"data": json, // Este json tiene que ser pasado a la api como form-data, sumado el archivo con la key file
}

Apis Externas

  • /api/attachments/v2 POST: Esta es la api que devuelve (/services/attachments POST), para poder subir el achivo, Guarda el archivo en s3 y marca en la base de datos que fue subido.

Base de datos

image

attachments_types

Los tipos de archivos que maneja la api, si se quiere agregar mas, se debera implementar la validacion correcta en la api de los mimetypes

attachments_entity_type

Relaciona el features (entity_type) con los tipos de archivos que admite

Como usar en un Feature

  • Lo primero es registrar el feature en attachments_entity_type, configurando los tipos de archivos
  • Subir un archivo
    • Crear una api que valide los permisos del feature
    • Utilizar la api interna para generar la url de subida de archivo
    • El cliente debe subir el archivo Usando esta api que devuelve el pegado interno
  • Ver archivo
    • Para joinear con la base de datos:
      LEFT JOIN attachments_entity ae ON ae.entity_type = $entity_type AND ae.entity_id = $id_registro and ae.deleted_at IS NULL
      LEFT JOIN attachments a ON a.id = ae.attachment_id AND a.fecha_fin IS NULL AND uploaded IS TRUE(uploaded opcional si queres joinear solo si se subio el archivo)
    • Crear api que valide permisos y utilizar el GET interno para generar url de S3
  • Eliminar archivo
    • Crear api que valide permisos y usar api interna DELETE

Deuda tecnica

Los archivos de labores usa esta base de datos pero las apis viejas, lo ideal seria unificar y borrar las apis viejas. Para esto actualizar la base de datos de labores, hoy los archivos de labores tiene entity_type=null.