236 lines
7.7 KiB
PHP
236 lines
7.7 KiB
PHP
<?php
|
|
// // /egbim/sw_upload/upload_delete.php
|
|
// header("Content-Type: application/json; charset=utf-8");
|
|
// ini_set('display_errors', 1);
|
|
// error_reporting(E_ALL);
|
|
|
|
// require __DIR__ . '/../vendor/autoload.php'; // AWS SDK
|
|
|
|
// use Aws\S3\S3Client;
|
|
// use Aws\Exception\AwsException;
|
|
|
|
// // === DB 연결 ===
|
|
// $conn = new mysqli('localhost', 'egbim', 'baron3840!!', 'egbim');
|
|
// if ($conn->connect_error) {
|
|
// http_response_code(500);
|
|
// echo json_encode(['status' => 'fail', 'message' => 'DB 연결 실패']);
|
|
// exit;
|
|
// }
|
|
// mysqli_set_charset($conn, 'utf8mb4');
|
|
|
|
// // === 파라미터 ===
|
|
// $ids = $_POST['ids'] ?? [];
|
|
// if (!is_array($ids) || empty($ids)) {
|
|
// http_response_code(400);
|
|
// echo json_encode(['status' => 'fail', 'message' => '삭제할 ID가 없습니다.']);
|
|
// exit;
|
|
// }
|
|
|
|
// // === S3 클라이언트 ===
|
|
// $bucket = 'baron-software-test'; // 삭제는 test 버킷에서만
|
|
// $s3 = new S3Client([
|
|
// 'version' => 'latest',
|
|
// 'region' => 'auto',
|
|
// 'endpoint' => 'https://81fa2d48964d31dd0da9558f9ce601d1.r2.cloudflarestorage.com',
|
|
// 'credentials' => [
|
|
// 'key' => '11d7027f505658acb3aeb40c3955a206',
|
|
// 'secret' => '65a78f6c582e0bdfccc2f431fc7b7be2ba11f999f0a8a87142011eac8b84761f',
|
|
// ]
|
|
// ]);
|
|
|
|
// $success = [];
|
|
// $failed = [];
|
|
|
|
// foreach ($ids as $id) {
|
|
// $id = (int)$id;
|
|
// $res = $conn->query("SELECT * FROM deploy_files WHERE id={$id} AND deleted=0");
|
|
// $file = $res->fetch_assoc();
|
|
// if (!$file) {
|
|
// $failed[] = ['id' => $id, 'error' => '파일 없음'];
|
|
// continue;
|
|
// }
|
|
// // ❌ 릴리즈된 경우 삭제 금지
|
|
// if (!empty($file['release_date'])) {
|
|
// $failed[] = ['error' => '이미 릴리즈된 파일은 삭제할 수 없습니다.'];
|
|
// continue;
|
|
// }
|
|
// $objectKey = $file['filepath'];
|
|
|
|
// try {
|
|
// // 1) S3 객체 삭제
|
|
// $s3->deleteObject([
|
|
// 'Bucket' => $bucket,
|
|
// 'Key' => $objectKey,
|
|
// ]);
|
|
|
|
// // 2) DB 플래그 업데이트
|
|
// $conn->query("UPDATE deploy_files SET deleted=1 WHERE id={$id}");
|
|
|
|
// // 3) ✅ 최신 내부 버전 갱신
|
|
// $productCode = $conn->real_escape_string($file['product_code']);
|
|
|
|
// // 삭제 후 남아있는 최신 버전 조회
|
|
// $verRes = $conn->prepare("
|
|
// SELECT sw_version
|
|
// FROM deploy_files
|
|
// WHERE product_code=? AND deleted=0
|
|
// ORDER BY
|
|
// CAST(SUBSTRING_INDEX(sw_version, '.', 1) AS UNSIGNED) DESC,
|
|
// CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(sw_version, '.', 2), '.', -1) AS UNSIGNED) DESC,
|
|
// CAST(SUBSTRING_INDEX(sw_version, '.', -1) AS UNSIGNED) DESC
|
|
// LIMIT 1
|
|
// ");
|
|
// $verRes->bind_param("s", $productCode);
|
|
// $verRes->execute();
|
|
// $newLatest = $verRes->get_result()->fetch_assoc()['sw_version'] ?? null;
|
|
|
|
// if ($newLatest) {
|
|
// // 남아있는 최신 버전으로 업데이트
|
|
// $conn->query("
|
|
// UPDATE deploy_versions_test
|
|
// SET family_version='{$newLatest}', updated_at=NOW()
|
|
// WHERE product_code='{$productCode}'
|
|
// ");
|
|
// } else {
|
|
// // 남은 버전이 없으면 초기화
|
|
// $conn->query("
|
|
// UPDATE deploy_versions_test
|
|
// SET family_version='0.0.0', updated_at=NOW()
|
|
// WHERE product_code='{$productCode}'
|
|
// ");
|
|
// }
|
|
|
|
// $success[] = $id; // ✅ id 로 반환
|
|
// } catch (AwsException $e) {
|
|
// $failed[] = ['id' => $id, 'error' => $e->getAwsErrorMessage()];
|
|
// }
|
|
// }
|
|
|
|
// echo json_encode([
|
|
// 'status' => empty($failed) ? 'ok' : 'partial',
|
|
// 'deleted' => $success,
|
|
// 'failed' => $failed,
|
|
// ]);
|
|
?>
|
|
<?php
|
|
// /egbim/sw_upload/upload_delete.php
|
|
header("Content-Type: application/json; charset=utf-8");
|
|
ini_set('display_errors', 1);
|
|
error_reporting(E_ALL);
|
|
|
|
require __DIR__ . '/../vendor/autoload.php'; // AWS SDK
|
|
|
|
use Aws\S3\S3Client;
|
|
use Aws\Exception\AwsException;
|
|
|
|
// === DB 연결 ===
|
|
$conn = new mysqli('localhost', 'egbim', 'baron3840!!', 'egbim');
|
|
if ($conn->connect_error) {
|
|
http_response_code(500);
|
|
echo json_encode(['status' => 'fail', 'message' => 'DB 연결 실패']);
|
|
exit;
|
|
}
|
|
mysqli_set_charset($conn, 'utf8mb4');
|
|
|
|
// === 파라미터 ===
|
|
$productCode = $_POST['product_code'] ?? '';
|
|
$swVersion = $_POST['sw_version'] ?? '';
|
|
|
|
if (!$productCode || !$swVersion) {
|
|
http_response_code(400);
|
|
echo json_encode(['status' => 'fail', 'message' => '삭제할 대상이 없습니다.']);
|
|
exit;
|
|
}
|
|
|
|
// === S3 클라이언트 ===
|
|
$bucket = 'baron-software-test'; // 삭제는 test 버킷에서만
|
|
$s3 = new S3Client([
|
|
'version' => 'latest',
|
|
'region' => 'auto',
|
|
'endpoint' => 'https://81fa2d48964d31dd0da9558f9ce601d1.r2.cloudflarestorage.com',
|
|
'credentials' => [
|
|
'key' => '11d7027f505658acb3aeb40c3955a206',
|
|
'secret' => '65a78f6c582e0bdfccc2f431fc7b7be2ba11f999f0a8a87142011eac8b84761f',
|
|
]
|
|
]);
|
|
|
|
$success = [];
|
|
$failed = [];
|
|
|
|
// === 버전 단위 전체 파일 조회 ===
|
|
$res = $conn->query("
|
|
SELECT * FROM deploy_files
|
|
WHERE product_code='{$conn->real_escape_string($productCode)}'
|
|
AND sw_version='{$conn->real_escape_string($swVersion)}'
|
|
AND deleted=0
|
|
");
|
|
$files = $res->fetch_all(MYSQLI_ASSOC);
|
|
|
|
if (!$files) {
|
|
echo json_encode(['status'=>'fail','message'=>'해당 버전의 파일이 없습니다.']);
|
|
exit;
|
|
}
|
|
|
|
// === 삭제 처리 루프 ===
|
|
foreach ($files as $file) {
|
|
// ❌ 릴리즈된 경우 → 전체 삭제 불가 처리
|
|
if (!empty($file['release_date'])) {
|
|
echo json_encode([
|
|
'status' => 'fail',
|
|
'message' => '이미 릴리즈된 파일은 삭제할 수 없습니다.'
|
|
]);
|
|
exit;
|
|
}
|
|
}
|
|
|
|
// ✅ 릴리즈 안 된 경우만 여기 도달 → 전체 삭제 진행
|
|
foreach ($files as $file) {
|
|
try {
|
|
// 1) S3 객체 삭제
|
|
$s3->deleteObject([
|
|
'Bucket' => $bucket,
|
|
'Key' => $file['filepath'],
|
|
]);
|
|
|
|
// 2) DB 플래그 업데이트
|
|
$conn->query("UPDATE deploy_files SET deleted=1 WHERE id={$file['id']}");
|
|
|
|
$success[] = $file['filename'];
|
|
} catch (AwsException $e) {
|
|
echo json_encode([
|
|
'status' => 'fail',
|
|
'message' => '파일 삭제 중 오류: '.$e->getAwsErrorMessage()
|
|
]);
|
|
exit;
|
|
}
|
|
}
|
|
|
|
// === 최신 내부 버전 갱신 ===
|
|
$verRes = $conn->query("
|
|
SELECT sw_version
|
|
FROM deploy_files
|
|
WHERE product_code='{$conn->real_escape_string($productCode)}'
|
|
AND deleted=0
|
|
ORDER BY
|
|
CAST(SUBSTRING_INDEX(sw_version, '.', 1) AS UNSIGNED) DESC,
|
|
CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(sw_version, '.', 2), '.', -1) AS UNSIGNED) DESC,
|
|
CAST(SUBSTRING_INDEX(sw_version, '.', -1) AS UNSIGNED) DESC
|
|
LIMIT 1
|
|
");
|
|
$newLatest = $verRes->fetch_assoc()['sw_version'] ?? '0.0.0';
|
|
|
|
$conn->query("
|
|
UPDATE deploy_versions_test
|
|
SET family_version='{$newLatest}', updated_at=NOW()
|
|
WHERE product_code='{$conn->real_escape_string($productCode)}'
|
|
");
|
|
|
|
echo json_encode([
|
|
'status' => empty($failed) ? 'ok' : 'fail',
|
|
'deleted' => $success,
|
|
'failed' => $failed,
|
|
'new_latest' => $newLatest ?? '0.0.0',
|
|
'message' => empty($failed)
|
|
? '삭제 완료'
|
|
: '삭제 실패: 이미 릴리즈된 파일이 있습니다.'
|
|
]);
|