updateTenantStorage($file->tenant_id, $file->file_size); } /** * 파일 소프트 삭제 시 - 테넌트 storage_used 감소 */ public function deleted(File $file): void { $this->updateTenantStorage($file->tenant_id, -$file->file_size); } /** * 파일 복원 시 - 테넌트 storage_used 증가 */ public function restored(File $file): void { $this->updateTenantStorage($file->tenant_id, $file->file_size); } /** * 파일 영구 삭제 시 - 이미 deleted에서 처리되므로 추가 작업 불필요 * forceDelete는 deleted 이벤트를 트리거하지 않으므로 별도 처리 */ public function forceDeleting(File $file): void { // 소프트 삭제되지 않은 상태에서 바로 forceDelete하는 경우만 처리 if (! $file->trashed()) { $this->updateTenantStorage($file->tenant_id, -$file->file_size); } } /** * 테넌트 저장소 사용량 업데이트 */ private function updateTenantStorage(?int $tenantId, int $sizeDelta): void { if (! $tenantId || $sizeDelta === 0) { return; } try { $tenant = Tenant::find($tenantId); if ($tenant) { // 음수가 되지 않도록 보호 $newSize = max(0, ($tenant->storage_used ?? 0) + $sizeDelta); $tenant->storage_used = $newSize; $tenant->save(); Log::debug("Tenant {$tenantId} storage updated: {$sizeDelta} bytes (total: {$newSize})"); } } catch (\Exception $e) { Log::error("Failed to update tenant storage: {$e->getMessage()}", [ 'tenant_id' => $tenantId, 'size_delta' => $sizeDelta, ]); } } }