'datetime', 'changed_data' => 'array', ]; public static function lastSyncId(): int { return (int) static::where('action', 'synced')->max('id') ?: 0; } public static function changesSince(?string $since): \Illuminate\Database\Eloquent\Collection { $query = static::whereIn('action', ['created', 'updated', 'deleted']) ->orderBy('datetime') ->orderBy('id'); if ($since !== null && $since !== '') { $query->where('datetime', '>', $since); } return $query->get(); } protected function serializeDate(\DateTimeInterface $date): string { return $date->format('Y-m-d H:i:s'); } public static function markSynced(string $ip): static { return static::create([ 'datetime' => now(), 'ip' => $ip, 'user' => auth()->user()?->name ?? 'system', 'table_name' => '', 'action' => 'synced', ]); } }