suspendUntil method

  1. @override
Future<void> suspendUntil(
  1. String runId,
  2. String stepName,
  3. DateTime when, {
  4. Map<String, Object?>? data,
})

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,
      },
    );
  });
}