touchOnUpdate static method

ModelCrudMetadata touchOnUpdate({
  1. required ModelCrudMetadata current,
  2. required String actor,
  3. DateTime? timestamp,
  4. bool bumpVersion = true,
})

Updates audit metadata for an existing record on modification.

Behavior:

  • Keeps recordId, createdBy and createdAt unchanged.
  • Sets updatedBy to actor.
  • Sets updatedAt to timestamp (UTC) or DateTime.now().toUtc().
  • When bumpVersion is true (default), increments version as: (current.version ?? 0) + 1.
  • When bumpVersion is false, preserves current.version.

This is typically used whenever the main record is updated.

Minimal runnable example:

void main() {
  final DateTime createdAt = DateTime.utc(2025, 1, 1, 10);
  final ModelCrudMetadata base = ModelCrudMetadata(
    recordId: 'group-001',
    createdBy: 'system@domain.com',
    createdAt: createdAt,
    updatedBy: 'system@domain.com',
    updatedAt: createdAt,
    version: 1,
  );

  final ModelCrudMetadata updated = ModelCrudMetadata.touchOnUpdate(
    current: base,
    actor: 'admin@domain.com',
  );

  print(updated.version);    // 2
  print(updated.updatedBy);  // admin@domain.com
}

Implementation

static ModelCrudMetadata touchOnUpdate({
  required ModelCrudMetadata current,
  required String actor,
  DateTime? timestamp,
  bool bumpVersion = true,
}) {
  final DateTime t = (timestamp ?? DateTime.now()).toUtc();
  final int? newVersion =
      bumpVersion ? ((current.version ?? 0) + 1) : current.version;

  return current.copyWith(
    updatedBy: actor,
    updatedAt: t,
    version: newVersion,
  );
}