최초 커밋
This commit is contained in:
@@ -0,0 +1,236 @@
|
||||
<?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)
|
||||
? '삭제 완료'
|
||||
: '삭제 실패: 이미 릴리즈된 파일이 있습니다.'
|
||||
]);
|
||||
Reference in New Issue
Block a user