feat(attachments): ensure 'key' is set as UUID on attachment creation and update tests for key validation

This commit is contained in:
2026-06-25 15:11:31 -03:00
parent aec92d5346
commit ee59236d55
3 changed files with 16 additions and 5 deletions

View File

@@ -12,6 +12,7 @@ use Illuminate\Support\Str;
#[Fillable([
'attachable_type',
'attachable_id',
'key',
'path',
'filename',
'type',
@@ -28,7 +29,9 @@ class Attachment extends Model
protected static function booted(): void
{
static::creating(function (self $attachment): void {
$attachment->key = (string) Str::uuid();
if (! $attachment->key) {
$attachment->key = (string) Str::uuid();
}
});
}

View File

@@ -8,6 +8,7 @@ use App\Domains\Attachable\Models\Attachment;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use Throwable;
class AttachmentService
@@ -32,10 +33,11 @@ class AttachmentService
throw new AttachmentStorageException('The attachment filename cannot be empty.');
}
$key = (string) Str::uuid();
$storedPath = Storage::disk('s3')->putFileAs(
$this->directoryFromPath($normalizedPath),
$file,
$filename,
$key,
);
if (! is_string($storedPath) || $storedPath === '') {
@@ -45,6 +47,7 @@ class AttachmentService
try {
/** @var Attachment $attachment */
$attachment = $attachable->attachments()->create([
'key' => $key,
'path' => $storedPath,
'filename' => $filename,
'type' => $type,