Dr-Panel/app/Models/SyncLog.php

64 lines
1.4 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class SyncLog extends Model
{
public $timestamps = false;
protected $table = 'sync_log';
protected $fillable = [
'datetime',
'ip',
'user',
'table_name',
'action',
'record_id',
'changed_data',
];
protected $casts = [
'datetime' => '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',
]);
}
}