40 lines
1.1 KiB
JavaScript
40 lines
1.1 KiB
JavaScript
|
|
import { Router } from 'express';
|
||
|
|
import { Symbol, SymbolLevel } from '../models/index.js';
|
||
|
|
import { getPublicUrl } from '../lib/s3.js';
|
||
|
|
|
||
|
|
const router = Router();
|
||
|
|
|
||
|
|
router.get('/', async (_req, res) => {
|
||
|
|
try {
|
||
|
|
const rows = await Symbol.findAll({
|
||
|
|
order: [['sort_order', 'ASC'], ['id', 'ASC']],
|
||
|
|
include: [{ model: SymbolLevel, as: 'levels' }],
|
||
|
|
});
|
||
|
|
res.json(rows.map((s) => {
|
||
|
|
const j = s.toJSON();
|
||
|
|
return {
|
||
|
|
id: j.id,
|
||
|
|
type: j.type,
|
||
|
|
region: j.region,
|
||
|
|
image_url: j.image ? getPublicUrl(j.image) : null,
|
||
|
|
max_level: j.max_level,
|
||
|
|
daily_default: j.daily_default,
|
||
|
|
weekly_default: j.weekly_default,
|
||
|
|
sort_order: j.sort_order,
|
||
|
|
levels: (j.levels || [])
|
||
|
|
.sort((a, b) => a.level - b.level)
|
||
|
|
.map((l) => ({
|
||
|
|
level: l.level,
|
||
|
|
required_count: l.required_count,
|
||
|
|
meso_cost: Number(l.meso_cost),
|
||
|
|
})),
|
||
|
|
};
|
||
|
|
}));
|
||
|
|
} catch (err) {
|
||
|
|
console.error('심볼 목록 조회 오류:', err.message);
|
||
|
|
res.status(500).json({ error: '심볼 목록 조회 실패' });
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
export default router;
|