feat: [bending] 기초자료 복사 시 R2 이미지 파일도 함께 복사
This commit is contained in:
@@ -136,7 +136,7 @@ public function update(int $id, array $data): BendingItem
|
||||
}
|
||||
|
||||
/**
|
||||
* 기초자료 복사 — 같은 분류코드의 다음 번호 자동 채번
|
||||
* 기초자료 복사 — 같은 분류코드의 다음 번호 자동 채번 + 이미지 복사
|
||||
*/
|
||||
public function duplicate(int $id): BendingItem
|
||||
{
|
||||
@@ -147,7 +147,7 @@ public function duplicate(int $id): BendingItem
|
||||
$prefix = $m[1] ?? 'XX';
|
||||
$newCode = $this->generateCode($prefix);
|
||||
|
||||
return BendingItem::create([
|
||||
$newItem = BendingItem::create([
|
||||
'tenant_id' => $source->tenant_id,
|
||||
'code' => $newCode,
|
||||
'item_name' => $source->item_name,
|
||||
@@ -170,6 +170,58 @@ public function duplicate(int $id): BendingItem
|
||||
'is_active' => true,
|
||||
'created_by' => $this->apiUserId(),
|
||||
]);
|
||||
|
||||
// 이미지 파일 복사 (R2)
|
||||
$this->duplicateFiles($source, $newItem);
|
||||
|
||||
return $newItem;
|
||||
}
|
||||
|
||||
/**
|
||||
* 원본 아이템의 파일을 R2에서 복사하여 새 아이템에 연결
|
||||
*/
|
||||
private function duplicateFiles(BendingItem $source, BendingItem $target): void
|
||||
{
|
||||
$files = \App\Models\Commons\File::where('document_id', $source->id)
|
||||
->where('document_type', 'bending_item')
|
||||
->whereNull('deleted_at')
|
||||
->get();
|
||||
|
||||
foreach ($files as $file) {
|
||||
try {
|
||||
$disk = \Illuminate\Support\Facades\Storage::disk('r2');
|
||||
$newStoredName = bin2hex(random_bytes(8)).'.'.pathinfo($file->stored_name, PATHINFO_EXTENSION);
|
||||
$dir = dirname($file->file_path);
|
||||
$newPath = $dir.'/'.$newStoredName;
|
||||
|
||||
// R2 내 파일 복사
|
||||
if ($file->file_path && $disk->exists($file->file_path)) {
|
||||
$disk->copy($file->file_path, $newPath);
|
||||
}
|
||||
|
||||
// 새 File 레코드 생성
|
||||
\App\Models\Commons\File::create([
|
||||
'tenant_id' => $target->tenant_id,
|
||||
'document_id' => $target->id,
|
||||
'document_type' => 'bending_item',
|
||||
'field_key' => $file->field_key,
|
||||
'file_path' => $newPath,
|
||||
'stored_name' => $newStoredName,
|
||||
'original_name' => $file->original_name,
|
||||
'display_name' => $file->display_name,
|
||||
'file_size' => $file->file_size,
|
||||
'mime_type' => $file->mime_type,
|
||||
'file_type' => $file->file_type,
|
||||
'created_by' => $this->apiUserId(),
|
||||
]);
|
||||
} catch (\Throwable $e) {
|
||||
\Illuminate\Support\Facades\Log::warning('BendingItem file duplicate failed', [
|
||||
'source_id' => $source->id,
|
||||
'file_id' => $file->id,
|
||||
'error' => $e->getMessage(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function delete(int $id): bool
|
||||
|
||||
Reference in New Issue
Block a user