Saltar al contenido principal

Compartir-masivo

Ver en Git


PENDIENTE HACER API

recibe 4 listas.

  • farms: id estancias
  • source: id usuario de quien comparte, debe ser el dueño de la estancia
  • destination: id usuario receptor
  • _role: id rol con el que compartir
        with pre_targets as (
select unnest( %(farms)s ) as farm_id,
unnest( %(source)s ) as ""source"",
unnest( %(destination)s ) as destination,
unnest( %(_role)s ) as _role
), targets as (
select farm_id, ""source"", destination, _role
from pre_targets
-- validate that who is sharing the farm is the owner
join permisos_estancias pe on pe.id_estancia = pre_targets.farm_id and pe.fecha_fin is null and pe.id_rol=1 and pe.id_usuario=pre_targets.""source""
), compartir_campo AS (
INSERT INTO estancias_compartidas(id_usuario_comparte,id_usuario_recibe,id_estancia)
select ""source"", destination, farm_id
from targets
--RETURNING id_usuario_recibe, id_estancia
), permitir_campo AS (
INSERT INTO permisos_estancias(id_usuario,id_estancia,id_rol)
SELECT destination, farm_id, _role
FROM targets
--RETURNING id_usuario, id_estancia
)
INSERT INTO permisos(id_usuario,id_lote,id_rol)
SELECT destination, l.id, _role
FROM targets as t join lotes as l on l.id_estancia = t.farm_id and l.fecha_fin is null
ON CONFLICT DO NOTHING;