Initial commit: 교육 프로젝트 배포

This commit is contained in:
송대일
2026-07-01 18:32:42 +09:00
commit be6dccd120
1483 changed files with 5082202 additions and 0 deletions
+109
View File
@@ -0,0 +1,109 @@
<?php
declare(strict_types=1);
header('Content-Type: application/json; charset=utf-8');
require_once dirname(__DIR__) . '/db_conn.php';
require_once dirname(__DIR__) . '/auth.php';
edu_start_session();
$memberId = edu_current_member_id();
$sysCompCode = (string)($_SESSION['sys_comp_code'] ?? '');
if ($memberId === '') {
echo json_encode(['success' => false, 'error' => 'not_logged_in'], JSON_UNESCAPED_UNICODE);
exit;
}
try {
$pdo = db_conn();
$pdo->exec("SET NAMES 'utf8mb4'");
// edu_user_keywords 테이블 없으면 생성 (권한 없으면 무시)
try {
$pdo->exec("
CREATE TABLE IF NOT EXISTS edu_user_keywords (
member_id VARCHAR(20) NOT NULL,
sys_comp_code VARCHAR(20) NOT NULL DEFAULT '',
keyword_code VARCHAR(20) NOT NULL,
sort_order INT NOT NULL DEFAULT 0,
PRIMARY KEY (member_id, sys_comp_code, keyword_code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
");
} catch (Throwable $__ce) { error_log('[user_keywords] CREATE: ' . $__ce->getMessage()); }
if ($sysCompCode === '') {
$st = $pdo->prepare('SELECT sys_comp_code FROM edu_users WHERE member_id = ? ORDER BY sys_comp_code LIMIT 1');
$st->execute([$memberId]);
$sysCompCode = (string)($st->fetchColumn() ?: '');
}
$method = $_SERVER['REQUEST_METHOD'] ?? 'GET';
// ── POST: 사용자 키워드 저장 ──────────────────────────
if ($method === 'POST') {
$input = json_decode(file_get_contents('php://input'), true) ?? [];
$rawKws = array_slice(
array_values(array_filter(array_map('trim', $input['keywords'] ?? []))),
0, 3
);
// 한글 키워드명 → KW 코드 변환
$nameToKw = [];
$codeRows = $pdo->query("SELECT base_code, code_name FROM edu_codes WHERE group_code = 'KW100'")->fetchAll(PDO::FETCH_ASSOC);
foreach ($codeRows as $cr) {
$nameToKw[$cr['code_name']] = $cr['base_code'];
}
// 기존 삭제 후 재삽입
try {
$delStmt = $pdo->prepare('DELETE FROM edu_user_keywords WHERE member_id = ? AND sys_comp_code = ?');
$delStmt->execute([$memberId, $sysCompCode]);
error_log('[user_keywords] DELETE completed');
} catch (Throwable $__de) {
error_log('[user_keywords] DELETE failed: ' . $__de->getMessage());
}
$insertCnt = 0;
try {
$stmtIns = $pdo->prepare(
'INSERT INTO edu_user_keywords (member_id, sys_comp_code, keyword_code) VALUES (?, ?, ?)'
);
foreach ($rawKws as $i => $kw) {
$code = $nameToKw[$kw] ?? null;
if ($code) {
$stmtIns->execute([$memberId, $sysCompCode, $code]);
$insertCnt++;
error_log('[user_keywords] INSERT: keyword=' . $kw . ' -> code=' . $code);
}
}
error_log('[user_keywords] total INSERT: ' . $insertCnt);
} catch (Throwable $__ie) {
error_log('[user_keywords] INSERT failed: ' . $__ie->getMessage());
echo json_encode(['success' => false, 'error' => 'insert_failed: ' . $__ie->getMessage()], JSON_UNESCAPED_UNICODE);
exit;
}
echo json_encode(['success' => true, 'inserted' => $insertCnt], JSON_UNESCAPED_UNICODE);
exit;
}
// ── GET: 사용자 키워드 조회 ── (sys_comp_code 조건 제거, member_id만으로 조회)
$stmt = $pdo->prepare("
SELECT uk.keyword_code, ec.code_name AS keyword_name
FROM edu_user_keywords uk
JOIN edu_codes ec ON ec.base_code = uk.keyword_code
WHERE uk.member_id = ?
ORDER BY uk.keyword_code
LIMIT 3
");
$stmt->execute([$memberId]);
$keywords = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo json_encode(['success' => true, 'keywords' => $keywords], JSON_UNESCAPED_UNICODE);
} catch (Throwable $e) {
error_log('[user_keywords] ' . $e->getMessage());
echo json_encode(['success' => false, 'error' => 'server_error'], JSON_UNESCAPED_UNICODE);
}