@@ -5,13 +5,15 @@ const { construct } = require('../../util/util');
55
66
77// Creates a new actor property name for a project.
8- const create = ( projectId , name ) => ( { one } ) =>
8+ const create = ( project , name ) => ( { one } ) =>
99 one ( sql `
1010INSERT INTO actor_properties ("projectId", "name")
11- VALUES (${ projectId } , ${ name } )
11+ VALUES (${ project . id } , ${ name } )
1212RETURNING *` )
1313 . then ( construct ( ActorProperty ) ) ;
1414
15+ create . audit = ( project , name ) => ( log ) => log ( 'actor_property.create' , project , { name } ) ;
16+
1517// Returns all actor property names for a project.
1618const getAllForProject = ( projectId ) => ( { all } ) =>
1719 all ( sql `
@@ -39,15 +41,15 @@ ORDER BY ap.name`)
3941// one to delete rows for null-valued properties, one to upsert non-null ones.
4042// properties is a plain object mapping property names to values (string or null),
4143// as returned by extractActorProperties() in lib/data/actor-properties.js.
42- const setValuesForActor = ( projectId , actorId , properties ) => async ( { run } ) => {
44+ const setValuesForActor = ( projectId , fieldKeyOrLink , properties ) => async ( { run } ) => {
4345 const entries = Object . entries ( properties ) ;
4446 const toDelete = entries . filter ( ( [ , v ] ) => v === null ) . map ( ( [ name ] ) => name ) ;
4547 const toUpsert = entries . filter ( ( [ , v ] ) => v !== null ) ;
4648
4749 if ( toDelete . length > 0 ) {
4850 await run ( sql `
4951DELETE FROM actor_property_values
50- WHERE "actorId" = ${ actorId }
52+ WHERE "actorId" = ${ fieldKeyOrLink . actorId }
5153 AND "actorPropertyId" IN (
5254 SELECT id FROM actor_properties
5355 WHERE "projectId" = ${ projectId } AND name = ANY(${ sql . array ( toDelete , 'text' ) } )
@@ -57,12 +59,18 @@ WHERE "actorId" = ${actorId}
5759 if ( toUpsert . length > 0 ) {
5860 await run ( sql `
5961INSERT INTO actor_property_values ("actorId", "actorPropertyId", "value")
60- SELECT ${ actorId } , ap.id, v.value
62+ SELECT ${ fieldKeyOrLink . actorId } , ap.id, v.value
6163FROM ${ sql . unnest ( toUpsert , [ 'text' , 'text' ] ) } AS v(name, value)
6264JOIN actor_properties ap ON ap."projectId" = ${ projectId } AND ap.name = v.name
6365ON CONFLICT ("actorId", "actorPropertyId") DO UPDATE SET "value" = EXCLUDED."value"` ) ;
6466 }
6567} ;
6668
69+ setValuesForActor . audit = ( _ , fieldKeyOrLink , properties ) => ( log ) => {
70+ // Look up `public_link` or `field_key` type from fieldKeyOrLink
71+ const action = `${ fieldKeyOrLink . constructor . actorType } .property.set` ;
72+ return log ( action , fieldKeyOrLink . actor , { properties } ) ;
73+ } ;
74+
6775module . exports = { create, getAllForProject, getAllForProjectWithValues, setValuesForActor } ;
6876
0 commit comments