109 lines
4.2 KiB
PHP
109 lines
4.2 KiB
PHP
<?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);
|
|
} |