/// Represents a generic data model with an ID and timestamps.
class Model {
  /// A unique identifier corresponding to this item.
  String? id;

  /// The time at which this item was created.
  DateTime? createdAt;

  /// The last time at which this item was updated.
  DateTime? updatedAt;

  Model({this.id, this.createdAt, this.updatedAt});

  /// Returns the [id], parsed as an [int].
  int get idAsInt => id != null ? int.tryParse(id ?? "-1") ?? -1 : -1;

  /// Returns the [id] or "" if null.
  String get idAsString => id ?? "";
}

/// Represents a generic data model with audit log feature.
class AuditableModel extends Model {
  /// The authorized user who created the record.
  String? createdBy;

  /// The user who updated the record last time.
  String? updatedBy;

  AuditableModel(
      {super.id,
      super.createdAt,
      this.createdBy,
      super.updatedAt,
      this.updatedBy});
}