feat: 관리자 대체 아이템 전용 필터 추가
This commit is contained in:
@@ -55,6 +55,8 @@ const {
|
||||
clearImageOptimizationJobs,
|
||||
cleanupMissingUploadReferences,
|
||||
replaceUploadSourceReferences,
|
||||
updateCustomItemDisplayReferences,
|
||||
clearCustomItemReplacement,
|
||||
} = require('../db')
|
||||
const { requireAdmin } = require('../middleware/auth')
|
||||
const { createMemoryUpload, writeOptimizedImage, getImageOptimizationQueueState } = require('../lib/image-storage')
|
||||
@@ -358,7 +360,7 @@ router.get('/custom-items', requireAdmin, async (req, res) => {
|
||||
page: z.coerce.number().int().min(1).optional().default(1),
|
||||
limit: z.coerce.number().int().min(1).max(200).optional().default(50),
|
||||
filter: z
|
||||
.enum(['library', 'all', 'user', 'template', 'asset', 'thumbnail', 'avatar', 'unused-user', 'unused-admin'])
|
||||
.enum(['library', 'all', 'user', 'template', 'asset', 'thumbnail', 'avatar', 'unused-user', 'replaced-user', 'unused-admin'])
|
||||
.optional()
|
||||
.default('library'),
|
||||
})
|
||||
@@ -837,6 +839,11 @@ router.post('/custom-items/:itemId/replace', requireAdmin, async (req, res) => {
|
||||
toLabel: targetItem.label || '',
|
||||
updateCustomItemsBySrc: false,
|
||||
})
|
||||
const displayResult = await updateCustomItemDisplayReferences({
|
||||
itemId: sourceItem.id,
|
||||
src: targetItem.src,
|
||||
label: targetItem.label || '',
|
||||
})
|
||||
await markCustomItemReplaced({
|
||||
itemId: sourceItem.id,
|
||||
replacedByItemId: targetItem.id || '',
|
||||
@@ -846,12 +853,31 @@ router.post('/custom-items/:itemId/replace', requireAdmin, async (req, res) => {
|
||||
|
||||
res.json({
|
||||
ok: true,
|
||||
updatedRows: result.updatedRows || 0,
|
||||
updatedRows: (result.updatedRows || 0) + (displayResult.updatedRows || 0),
|
||||
sourceItem,
|
||||
targetItem,
|
||||
})
|
||||
})
|
||||
|
||||
router.post('/custom-items/:itemId/restore', requireAdmin, async (req, res) => {
|
||||
const sourceItem = await findCustomItemById(req.params.itemId)
|
||||
if (!sourceItem?.id) return res.status(404).json({ error: 'not_found' })
|
||||
if (!sourceItem.replacedAt) return res.status(409).json({ error: 'not_replaced' })
|
||||
|
||||
const restored = await updateCustomItemDisplayReferences({
|
||||
itemId: sourceItem.id,
|
||||
src: sourceItem.src,
|
||||
label: sourceItem.label || '',
|
||||
})
|
||||
await clearCustomItemReplacement(sourceItem.id)
|
||||
|
||||
res.json({
|
||||
ok: true,
|
||||
restoredRows: restored.updatedRows || 0,
|
||||
item: await findCustomItemById(sourceItem.id),
|
||||
})
|
||||
})
|
||||
|
||||
router.post('/tierlists/:tierListId/promote-items', requireAdmin, async (req, res) => {
|
||||
const schema = z.object({
|
||||
topicId: z.string().min(1),
|
||||
|
||||
Reference in New Issue
Block a user