setSchedule static method

Future<void> setSchedule(
  1. Client cloudApiClient, {
  2. required CommandLogger logger,
  3. required String projectId,
  4. required BackupFrequency frequency,
  5. int? day,
  6. int? hour,
  7. Duration? retention,
})

Sets (creates or updates) the automated backup schedule for the project's database.

hour defaults to 0 (midnight UTC). For weekly and monthly schedules day defaults to 1 when omitted; it is not applicable to daily schedules and is ignored in that case.

Implementation

static Future<void> setSchedule(
  final Client cloudApiClient, {
  required final CommandLogger logger,
  required final String projectId,
  required final BackupFrequency frequency,
  final int? day,
  final int? hour,
  final Duration? retention,
}) async {
  final effectiveHour = hour ?? 0;
  final effectiveDay = switch (frequency) {
    BackupFrequency.daily => null,
    BackupFrequency.weekly || BackupFrequency.monthly => day ?? 1,
  };

  if (frequency == BackupFrequency.daily && day != null) {
    logger.warning(
      'A day is not applicable to a daily schedule and is ignored.',
    );
  }

  try {
    await cloudApiClient.database.setBackupSchedule(
      cloudCapsuleId: projectId,
      frequency: frequency,
      day: effectiveDay,
      hour: effectiveHour,
      retention: retention,
    );
  } on Exception catch (e, s) {
    throw FailureException.nested(e, s, 'Failed to set backup schedule');
  }

  logger.success(
    'Backup schedule set for project "$projectId".',
    newParagraph: true,
  );
  _scheduleTable(
    BackupSchedule(
      frequency: frequency,
      day: effectiveDay,
      hour: effectiveHour,
      retention: retention,
    ),
  ).writeLines(logger.line);
}