export function mapUIReferenceDataItemToUpdateMutationInput()

in source/lambda/filter-kinesis-stream/index.ts [193:228]


export function mapUIReferenceDataItemToUpdateMutationInput(item: IUIReferenceDataItem): IUpdateReferenceDataMutationInput {
    if (!item.id) { throw new Error('ID was not supplied'); }
    if (!item.type) { throw new Error('Type was not supplied'); }

    const mutateInput: IUpdateReferenceDataMutationInput = {
        id: item.id,
        type: item.type
    };

    const expressionNames = {};
    const expressionValues = {};

    // Set the updated timestamp to the current time
    item.machineStatusUpdatedTimestamp = moment.utc().unix();

    const keys = Object.keys(item);
    for (let i = 0; i < keys.length; i++) {
        const key = keys[i];

        if (item.hasOwnProperty(key) && key !== 'id' && key !== 'type') {
            expressionNames[`#name${i + 1}`] = key;
            expressionValues[`:val${i + 1}`] = item[key];

            if (!mutateInput.expression) {
                mutateInput.expression = `SET #name${i + 1} = :val${i + 1}`;
            } else {
                mutateInput.expression = `${mutateInput.expression}, #name${i + 1} = :val${i + 1}`;
            }
        }
    }

    mutateInput.expressionNames = JSON.stringify(expressionNames);
    mutateInput.expressionValues = JSON.stringify(expressionValues);

    return mutateInput;
}