PDO::ERRMODE_EXCEPTION] // ); // $productCode = $_POST['product_code'] ?? ''; // $version = $_POST['version'] ?? ''; // $userName = $_SESSION['user']['name'] ?? '알수없음'; // if(!$productCode){ // echo json_encode(['status'=>'fail','message'=>'제품 코드 누락']); // exit; // } // // ✅ 버전이 비어있으면 기본값 "0.0.0" // $version = trim($version) !== '' ? $version : '0.0.0'; // // ✅ family_version = external_version 동일하게 저장 // $st = $pdo->prepare(" // INSERT INTO deploy_versions (product_code, family_version, external_version, external_updated_by, updated_at) // VALUES (:pc, :ver, :ver, :user, NOW()) // ON DUPLICATE KEY UPDATE // family_version = VALUES(family_version), // external_version = VALUES(external_version), // external_updated_by = VALUES(external_updated_by), // updated_at = NOW() // "); // $st->execute([ // ':pc' => $productCode, // ':ver' => $version, // ':user' => $userName // ]); // echo json_encode([ // 'status' => 'ok', // 'family_version' => $version, // 'external_version' => $version, // 'updated_by' => $userName // ]); // } catch(Exception $e){ // echo json_encode(['status'=>'fail','message'=>$e->getMessage()]); // } ?> PDO::ERRMODE_EXCEPTION] // ); // $productCode = $_POST['product_code'] ?? ''; // $version = trim($_POST['version'] ?? ''); // 프론트에서 "" 혹은 "1.2.3" 전달 // $userName = $_SESSION['user']['name'] ?? '알수없음'; // if(!$productCode){ // echo json_encode(['status'=>'fail','message'=>'제품 코드 누락']); // exit; // } // // 1. 현재 테이블의 최신 정보를 먼저 가져옵니다 (내부 버전 유지 목적) // $st = $pdo->prepare("SELECT family_version FROM deploy_versions WHERE product_code=? ORDER BY updated_at DESC LIMIT 1"); // $st->execute([$productCode]); // $currentFamily = $st->fetchColumn() ?: '0.0.0'; // // 2. "사용안함" 처리 로직 // // upload_version_get.php 로직에 맞춰 "사용안함"일 때는 외부 버전을 내부 버전과 동일하게 세팅 // if ($version === '' || $version === '0.0.0') { // $targetExternal = $currentFamily; // } else { // $targetExternal = $version; // } // // 3. DB 업데이트 // $st = $pdo->prepare(" // INSERT INTO deploy_versions (product_code, family_version, external_version, external_updated_by, updated_at) // VALUES (:pc, :family, :external, :user, NOW()) // ON DUPLICATE KEY UPDATE // family_version = VALUES(family_version), // external_version = VALUES(external_version), // external_updated_by = VALUES(external_updated_by), // updated_at = NOW() // "); // $st->execute([ // ':pc' => $productCode, // ':family' => $currentFamily, // 내부 버전은 그대로 유지 // ':external' => $targetExternal, // 외부 버전만 변경 // ':user' => $userName // ]); // echo json_encode([ // 'status' => 'ok', // 'family_version' => $currentFamily, // 'external_version' => ($version === '' ? '' : $version), // 'updated_by' => $userName // ]); // } catch(Exception $e){ // echo json_encode(['status'=>'fail','message'=>$e->getMessage()]); // } ?> PDO::ERRMODE_EXCEPTION] ); $productCode = $_POST['product_code'] ?? ''; // ✅ 프론트에서 넘어온 값이 빈 문자열("")이면 "사용안함"을 의미함 $version = isset($_POST['version']) ? trim($_POST['version']) : ''; $userName = $_SESSION['user']['name'] ?? '알수없음'; if(!$productCode){ echo json_encode(['status'=>'fail','message'=>'제품 코드 누락']); exit; } // 1️⃣ 현재 DB에 저장된 내부 최신 버전(family_version)을 가져옵니다. // 외부 버전만 바꿀 때 내부 버전 정보를 잃어버리지 않기 위함입니다. $st = $pdo->prepare("SELECT family_version FROM deploy_versions WHERE product_code=? ORDER BY updated_at DESC LIMIT 1"); $st->execute([$productCode]); $currentFamily = $st->fetchColumn(); // 만약 데이터가 아예 없다면 기본값 설정 if (!$currentFamily) $currentFamily = '0.0.0'; // 2️⃣ "사용안함" 처리 핵심 로직 // GET API 로직(if $externalVer === $familyVer)에 맞춰서, // 사용자가 "사용안함"을 선택했다면 external_version을 family_version과 똑같이 맞춰 저장합니다. if ($version === '') { $targetExternal = $currentFamily; // 내부 버전과 동일하게 변경 } else { $targetExternal = $version; // 선택한 특정 버전으로 변경 } // 3️⃣ DB 업데이트 (INSERT ... ON DUPLICATE KEY UPDATE) // product_code가 PK이거나 Unique 인덱스여야 기존 데이터가 수정됩니다. $st = $pdo->prepare(" INSERT INTO deploy_versions (product_code, family_version, external_version, external_updated_by, updated_at) VALUES (:pc, :family, :external, :user, NOW()) ON DUPLICATE KEY UPDATE family_version = VALUES(family_version), external_version = VALUES(external_version), external_updated_by = VALUES(external_updated_by), updated_at = NOW() "); $st->execute([ ':pc' => $productCode, ':family' => $currentFamily, ':external' => $targetExternal, ':user' => $userName ]); echo json_encode([ 'status' => 'ok', 'family_version' => $currentFamily, 'external_version' => $targetExternal, // 외부 버전은 targetExternal로 설정 'updated_by' => $userName ]); } catch(Exception $e){ echo json_encode(['status'=>'fail', 'message'=> $e->getMessage()]); } ?>