- React + Vite + Tailwind 프론트엔드 - Express + Sequelize + MariaDB 백엔드 - 넥슨 OAuth 2.0 인증 (캐릭터 목록 조회) - 주간 보스 결정석 수익 계산기 UI (리스트형) - Docker Compose + Caddy 리버스 프록시 설정 - 보스/난이도 이미지 에셋 포함 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
63 lines
2 KiB
JavaScript
63 lines
2 KiB
JavaScript
import { Router } from 'express';
|
|
import { requireAuth } from '../middleware/auth.js';
|
|
import { getCharacterList, getCharacterOcid, getCharacterBasic } from '../services/nexon.js';
|
|
import { UserCharacter } from '../models/index.js';
|
|
|
|
const router = Router();
|
|
|
|
// 내 캐릭터 목록 조회
|
|
router.get('/', requireAuth, async (req, res) => {
|
|
try {
|
|
const characters = await UserCharacter.findAll({
|
|
where: { user_id: req.session.userId },
|
|
order: [['character_level', 'DESC']],
|
|
});
|
|
res.json(characters);
|
|
} catch (err) {
|
|
console.error('캐릭터 목록 조회 오류:', err.message);
|
|
res.status(500).json({ error: '캐릭터 목록 조회 실패' });
|
|
}
|
|
});
|
|
|
|
// 캐릭터 목록 갱신 (넥슨 API에서 다시 가져오기)
|
|
router.post('/refresh', requireAuth, async (req, res) => {
|
|
try {
|
|
const charList = await getCharacterList(req.session.accessToken);
|
|
|
|
if (!charList?.account_list) {
|
|
return res.status(400).json({ error: '캐릭터 목록을 가져올 수 없습니다' });
|
|
}
|
|
|
|
const results = [];
|
|
|
|
for (const account of charList.account_list) {
|
|
for (const char of account.character_list || []) {
|
|
try {
|
|
const ocid = await getCharacterOcid(char.character_name);
|
|
const basic = await getCharacterBasic(ocid);
|
|
|
|
const [userChar] = await UserCharacter.upsert({
|
|
user_id: req.session.userId,
|
|
character_name: char.character_name,
|
|
ocid,
|
|
world_name: basic.world_name,
|
|
job_name: basic.character_class,
|
|
character_level: basic.character_level,
|
|
character_image: basic.character_image,
|
|
});
|
|
|
|
results.push(userChar);
|
|
} catch (err) {
|
|
console.error(`캐릭터 조회 실패: ${char.character_name}`, err.message);
|
|
}
|
|
}
|
|
}
|
|
|
|
res.json(results);
|
|
} catch (err) {
|
|
console.error('캐릭터 갱신 오류:', err.message);
|
|
res.status(500).json({ error: '캐릭터 목록 갱신 실패' });
|
|
}
|
|
});
|
|
|
|
export default router;
|