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); }