릴리스: v1.3.70 관리자 티어표 필터와 관리 액션 보강

This commit is contained in:
2026-04-02 15:28:52 +09:00
parent badf250967
commit a7cfb97131
8 changed files with 246 additions and 17 deletions

View File

@@ -22,6 +22,7 @@ const {
updateImageAssetLabel,
deleteGameItem,
deleteGame,
deleteTierList,
updateGameDisplayOrder,
listCustomItems,
findCustomItemById,
@@ -33,6 +34,7 @@ const {
listAdminTierLists,
summarizeAdminTierLists,
findTierListById,
updateAdminTierListMeta,
listAdminTemplateRequests,
findTemplateRequestById,
updateTemplateRequestStatus,
@@ -296,6 +298,7 @@ router.get('/custom-items', requireAdmin, async (req, res) => {
router.get('/tierlists', requireAdmin, async (req, res) => {
const schema = z.object({
q: z.string().trim().max(120).optional().default(''),
gameId: z.string().trim().max(120).optional().default(''),
page: z.coerce.number().int().min(1).optional().default(1),
limit: z.coerce.number().int().min(1).max(200).optional().default(50),
})
@@ -304,6 +307,7 @@ router.get('/tierlists', requireAdmin, async (req, res) => {
const result = await listAdminTierLists({
queryText: parsed.data.q,
gameId: parsed.data.gameId,
page: parsed.data.page,
limit: parsed.data.limit,
currentUserId: req.session?.userId || '',
@@ -693,6 +697,34 @@ router.post('/tierlists/:tierListId/create-game-template', requireAdmin, async (
res.json(result)
})
router.patch('/tierlists/:tierListId', requireAdmin, async (req, res) => {
const schema = z.object({
title: z.string().trim().min(1).max(120),
description: z.string().max(500).optional().default(''),
isPublic: z.boolean(),
})
const parsed = schema.safeParse(req.body)
if (!parsed.success) return res.status(400).json({ error: 'bad_request' })
const tierList = await findTierListById(req.params.tierListId)
if (!tierList) return res.status(404).json({ error: 'not_found' })
const updated = await updateAdminTierListMeta({
id: tierList.id,
title: parsed.data.title,
description: parsed.data.description || '',
isPublic: parsed.data.isPublic,
})
res.json({ tierList: updated })
})
router.delete('/tierlists/:tierListId', requireAdmin, async (req, res) => {
const tierList = await findTierListById(req.params.tierListId)
if (!tierList) return res.status(404).json({ error: 'not_found' })
await deleteTierList(tierList.id)
res.json({ ok: true })
})
router.post('/template-requests/:requestId/approve', requireAdmin, async (req, res) => {
const templateRequest = await findTemplateRequestById(req.params.requestId)
if (!templateRequest) return res.status(404).json({ error: 'not_found' })