Upload beautify

This commit is contained in:
2026-02-14 15:14:12 +01:00
parent e129618910
commit 79192345e3
249 changed files with 24436 additions and 1021 deletions

View File

@@ -0,0 +1,18 @@
<?php
declare(strict_types=1);
namespace App\Repositories\Uploads;
use Illuminate\Support\Facades\DB;
final class ArtworkFileRepository
{
public function upsert(int $artworkId, string $variant, string $path, string $mime, int $size): void
{
DB::table('artwork_files')->updateOrInsert(
['artwork_id' => $artworkId, 'variant' => $variant],
['path' => $path, 'mime' => $mime, 'size' => $size]
);
}
}

View File

@@ -0,0 +1,21 @@
<?php
declare(strict_types=1);
namespace App\Repositories\Uploads;
use Illuminate\Support\Facades\DB;
final class AuditLogRepository
{
public function log(?int $userId, string $action, string $ip, array $meta = []): void
{
DB::table('audit_logs')->insert([
'user_id' => $userId,
'action' => $action,
'ip' => $ip,
'meta' => empty($meta) ? null : json_encode($meta, JSON_THROW_ON_ERROR),
'created_at' => now()->toDateTimeString(),
]);
}
}

View File

@@ -0,0 +1,113 @@
<?php
declare(strict_types=1);
namespace App\Repositories\Uploads;
use App\DTOs\Uploads\UploadSessionData;
use App\Services\Uploads\UploadSessionStatus;
use Carbon\CarbonImmutable;
use Illuminate\Support\Facades\DB;
use RuntimeException;
final class UploadSessionRepository
{
public function create(string $id, int $userId, string $tempPath, string $status, string $ip): UploadSessionData
{
$createdAt = CarbonImmutable::now();
DB::table('uploads_sessions')->insert([
'id' => $id,
'user_id' => $userId,
'temp_path' => $tempPath,
'status' => $status,
'ip' => $ip,
'created_at' => $createdAt->toDateTimeString(),
'progress' => 0,
'failure_reason' => null,
]);
return new UploadSessionData($id, $userId, $tempPath, $status, $ip, $createdAt, 0, null);
}
public function get(string $id): ?UploadSessionData
{
$row = DB::table('uploads_sessions')->where('id', $id)->first();
if (! $row) {
return null;
}
return new UploadSessionData(
(string) $row->id,
(int) $row->user_id,
(string) $row->temp_path,
(string) $row->status,
(string) $row->ip,
CarbonImmutable::parse($row->created_at),
(int) ($row->progress ?? 0),
$row->failure_reason ? (string) $row->failure_reason : null
);
}
public function getOrFail(string $id): UploadSessionData
{
$session = $this->get($id);
if (! $session) {
throw new RuntimeException('Upload session not found.');
}
return $session;
}
public function updateStatus(string $id, string $status): void
{
DB::table('uploads_sessions')->where('id', $id)->update([
'status' => $status,
]);
}
public function updateProgress(string $id, int $progress): void
{
DB::table('uploads_sessions')->where('id', $id)->update([
'progress' => max(0, min(100, $progress)),
]);
}
public function updateFailureReason(string $id, ?string $reason): void
{
DB::table('uploads_sessions')->where('id', $id)->update([
'failure_reason' => $reason,
]);
}
public function updateTempPath(string $id, string $tempPath): void
{
DB::table('uploads_sessions')->where('id', $id)->update([
'temp_path' => $tempPath,
]);
}
public function countActiveForUser(int $userId): int
{
$terminal = [
UploadSessionStatus::PROCESSED,
UploadSessionStatus::QUARANTINED,
UploadSessionStatus::CANCELLED,
];
return (int) DB::table('uploads_sessions')
->where('user_id', $userId)
->whereNotIn('status', $terminal)
->count();
}
public function countForUserSince(int $userId, CarbonImmutable $since): int
{
return (int) DB::table('uploads_sessions')
->where('user_id', $userId)
->where('created_at', '>=', $since->toDateTimeString())
->count();
}
}