suspendUntil method
Suspends runId until the given when.
Implementations should persist data so it becomes available as
resumeData when the run wakes up.
Implementation
@override
Future<void> suspendUntil(
String runId,
String stepName,
DateTime when, {
Map<String, Object?>? data,
}) async {
final metadata = _prepareSuspensionData(data, resumeAt: when);
await _client.run((Connection conn) async {
final now = _nowUtc();
await conn.execute(
Sql.named('''
UPDATE $_runsTable
SET status = @status,
resume_at = @resumeAt,
wait_topic = NULL,
suspension_data = @data::jsonb,
updated_at = @updatedAt
WHERE id = @id
'''),
parameters: {
'status': WorkflowStatus.suspended.name,
'resumeAt': when,
'data': jsonEncode(metadata),
'id': runId,
'updatedAt': now,
},
);
});
}