최초 커밋

This commit is contained in:
root
2026-07-23 16:15:57 +09:00
commit c8f5efb6b7
14652 changed files with 4812531 additions and 0 deletions
+236
View File
@@ -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)
? '삭제 완료'
: '삭제 실패: 이미 릴리즈된 파일이 있습니다.'
]);