handle merging tag categories
All checks were successful
Build and Push Docker Image / build (push) Successful in 55s
All checks were successful
Build and Push Docker Image / build (push) Successful in 55s
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import { NextRequest, NextResponse } from 'next/server'
|
||||
import { updateCategory, deleteCategory, deleteCategoryForce, getTags } from '@/lib/tags'
|
||||
import { updateCategory, deleteCategory, deleteCategoryForce, getTags, getCategories, mergeCategories } from '@/lib/tags'
|
||||
import { requireAdmin } from '@/lib/auth'
|
||||
|
||||
export async function PATCH(
|
||||
@@ -11,9 +11,30 @@ export async function PATCH(
|
||||
|
||||
try {
|
||||
const { id } = await params
|
||||
const { name } = await request.json()
|
||||
const category = updateCategory(id, name)
|
||||
return NextResponse.json(category)
|
||||
const { name, merge } = await request.json()
|
||||
|
||||
try {
|
||||
const category = updateCategory(id, name)
|
||||
return NextResponse.json(category)
|
||||
} catch (err) {
|
||||
const msg = (err as Error).message
|
||||
if (!msg.includes('already exists')) throw err
|
||||
|
||||
// A category with this name already exists — find it
|
||||
const trimmed = (name as string).trim()
|
||||
const target = getCategories().find((c) => c.name.toLowerCase() === trimmed.toLowerCase())
|
||||
if (!target) throw err
|
||||
|
||||
if (merge) {
|
||||
mergeCategories(id, target.id)
|
||||
return NextResponse.json(target)
|
||||
}
|
||||
|
||||
return NextResponse.json(
|
||||
{ error: msg, conflict: true, targetCategoryId: target.id },
|
||||
{ status: 409 }
|
||||
)
|
||||
}
|
||||
} catch (err) {
|
||||
return NextResponse.json({ error: (err as Error).message }, { status: 400 })
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user