Implementation
Map<String, dynamic> toInsertJson() {
return {
// Include `id` when supplied client-side (offline-outbox flow); the
// server's `gen_random_uuid()` default kicks in when absent so the
// existing online insert path works unchanged.
if (id != null && id!.isNotEmpty) 'id': id,
'card_id': cardId,
'user_id': userId,
'quality': quality,
'rating': rating,
'elapsed_days': elapsedDays,
'scheduled_days': scheduledDays,
'stability': stability,
'difficulty': difficulty,
'review_state': reviewState,
'reviewed_at': reviewedAt.toIso8601String(),
};
}