presseportale/app/Models/ApiUsageLog.php
Kevin Adametz 002dc08b5c privacy: Löschfristen für Aktivitätsverlauf (395 Tage) und API-Zugriffsprotokoll (90 Tage)
Beide Tabellen hatten keine Frist; activity_events trägt Namen und Adressen
im Klartext, api_usage_logs IP und User-Agent. MassPrunable, täglich 04:05
über model:prune, Fristen in config/monitoring.php (Roadmap 4.2).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 13:35:54 +00:00

62 lines
1.4 KiB
PHP

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\MassPrunable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Laravel\Sanctum\PersonalAccessToken;
class ApiUsageLog extends Model
{
use MassPrunable;
public $timestamps = false;
protected $fillable = [
'user_id',
'personal_access_token_id',
'method',
'path',
'route_name',
'status_code',
'ip_address',
'user_agent',
'duration_ms',
'requested_at',
];
protected function casts(): array
{
return [
'requested_at' => 'datetime',
];
}
/**
* @return BelongsTo<User, $this>
*/
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
/**
* @return BelongsTo<PersonalAccessToken, $this>
*/
public function personalAccessToken(): BelongsTo
{
return $this->belongsTo(PersonalAccessToken::class);
}
/**
* Zugriffe nach der Löschfrist (config monitoring.retention, 90 Tage).
*
* @return Builder<static>
*/
public function prunable(): Builder
{
return static::query()->where('requested_at', '<', now()->subDays((int) config('monitoring.retention.api_usage_logs_days')));
}
}