false, "error" => "Method not allowed" ], JSON_UNESCAPED_UNICODE); exit; } // 요청 본문에서 invoiceId 가져오기 $rawInput = file_get_contents('php://input'); $input = json_decode($rawInput, true); $invoiceId = $input['invoiceId'] ?? $_GET['invoiceId'] ?? null; // 디버깅: 요청 데이터 로그 error_log("Delete request - Raw input: " . $rawInput); error_log("Delete request - Parsed input: " . print_r($input, true)); error_log("Delete request - invoiceId: " . var_export($invoiceId, true)); if (!$invoiceId) { http_response_code(400); echo json_encode([ "success" => false, "error" => "invoiceId is required", "debug" => [ "rawInput" => $rawInput, "parsedInput" => $input, "getParams" => $_GET ] ], JSON_UNESCAPED_UNICODE); exit; } $dataFile = __DIR__ . '/invoices_data.json'; // 파일에서 데이터 읽기 $existingData = []; if (file_exists($dataFile)) { $fileContent = file_get_contents($dataFile); if ($fileContent !== false) { $existingData = json_decode($fileContent, true); if (!is_array($existingData)) { $existingData = []; } } else { error_log("Failed to read invoices_data.json file"); } } else { error_log("invoices_data.json file does not exist"); } if (!isset($existingData['invoices'])) { $existingData['invoices'] = []; } // 디버깅: 현재 파일에 있는 ID 목록 $currentIds = array_map(function($inv) { return $inv['id'] ?? 'no-id'; }, $existingData['invoices']); error_log("Current invoice IDs in file: " . implode(', ', $currentIds)); error_log("Looking for invoiceId: " . $invoiceId); // 삭제된 ID 목록 파일 $deletedIdsFile = __DIR__ . '/deleted_ids.json'; $deletedIds = []; // 삭제된 ID 목록 읽기 if (file_exists($deletedIdsFile)) { $deletedContent = file_get_contents($deletedIdsFile); if ($deletedContent !== false) { $deletedIds = json_decode($deletedContent, true); if (!is_array($deletedIds)) { $deletedIds = []; } } } // 기본 mock 데이터인 경우, 삭제된 ID 목록에 추가 $defaultMockIds = ['inv_001', 'inv_002', 'inv_003']; if (in_array($invoiceId, $defaultMockIds)) { // 이미 삭제된 경우 if (in_array($invoiceId, $deletedIds)) { http_response_code(404); echo json_encode([ "success" => false, "error" => "Invoice not found", "message" => "이미 삭제된 항목입니다." ], JSON_UNESCAPED_UNICODE); exit; } // 삭제된 ID 목록에 추가 $deletedIds[] = $invoiceId; $deletedIds = array_unique($deletedIds); // 중복 제거 file_put_contents($deletedIdsFile, json_encode($deletedIds, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)); echo json_encode([ "success" => true, "message" => "Invoice deleted successfully", "deletedId" => $invoiceId ], JSON_UNESCAPED_UNICODE); exit; } // 해당 ID의 인보이스 찾아서 삭제 $beforeCount = count($existingData['invoices']); $foundInvoice = null; foreach ($existingData['invoices'] as $index => $invoice) { $currentId = $invoice['id'] ?? ''; // 문자열 비교 (타입 변환) if ((string)$currentId === (string)$invoiceId) { $foundInvoice = $invoice; unset($existingData['invoices'][$index]); break; } } $existingData['invoices'] = array_values($existingData['invoices']); // 인덱스 재정렬 $afterCount = count($existingData['invoices']); if ($beforeCount === $afterCount) { // 삭제할 항목이 없었음 error_log("Invoice not found - beforeCount: $beforeCount, afterCount: $afterCount"); http_response_code(404); echo json_encode([ "success" => false, "error" => "Invoice not found", "message" => "해당 세금계산서를 찾을 수 없습니다. 이미 삭제되었거나 존재하지 않는 항목일 수 있습니다.", "debug" => [ "invoiceId" => $invoiceId, "invoiceIdType" => gettype($invoiceId), "totalInvoices" => $beforeCount, "availableIds" => $currentIds ] ], JSON_UNESCAPED_UNICODE); exit; } // 파일에 저장 $jsonData = json_encode($existingData, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); $saveResult = @file_put_contents($dataFile, $jsonData); if ($saveResult === false) { http_response_code(500); echo json_encode([ "success" => false, "error" => "Failed to save data" ], JSON_UNESCAPED_UNICODE); exit; } echo json_encode([ "success" => true, "message" => "Invoice deleted successfully", "deletedId" => $invoiceId ], JSON_UNESCAPED_UNICODE); ?>