handle merging tag categories
All checks were successful
Build and Push Docker Image / build (push) Successful in 55s

This commit is contained in:
Garret Patti
2026-04-19 23:25:09 -04:00
parent fc9a7af7c3
commit 71a026f01e
3 changed files with 137 additions and 5 deletions

View File

@@ -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 })
}