Attachments
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

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
- Para joinear con la base de datos:
- 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.