Initial commit: 교육 프로젝트 배포
This commit is contained in:
@@ -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);
|
||||
}
|
||||
Reference in New Issue
Block a user