// Structure
// User { id }
// Order { id, customer_id, amount }
agent.customizeCollection('user', collection => {
collection.addField('totalSpending', {
columnType: 'Number',
dependencies: ['id'],
getValues: async (records, context) => {
const recordIds = records.map(r => r.id);
// We're using Forest's query interface
// (use an ORM or a plain SQL query)
const filter = {
conditionTree: { field: 'customer_id', operator: 'In', value: recordIds },
};
const aggregation = {
operation: 'Sum',
field: 'amount',
groups: [{ field: 'customer_id' }],
};
const rows = await context.dataSource
.getCollection('order')
.aggregate(filter, aggregation);
return records.map(record => {
const row = rows.find(r => r.group.customer_id === record.id);
return row?.value ?? 0;
});
},
});
});