import { withAdmin } from '@/lib/api-handler' import { apiError } from '@/lib/api-response' import { PERMS } from '@/lib/permissions' import { logAudit } from '@/lib/services/audit' import { runSseBatch } from '@/lib/services/import/core/sse-batch' import { ensurePetDirs, importSinglePet } from '@/lib/services/pet-import' interface PetBatchItem { lib: string } export const POST = withAdmin({ permission: PERMS.ASSETS_IMPORT }, async (request, ctx) => { const body = await request.json() const rawItems: PetBatchItem[] = body.items || [] const concurrency = body.concurrency || 3 if (rawItems.length === 0) return apiError('No pets to import', 400) const seen = new Set() const items = rawItems.filter((it) => { if (seen.has(it.lib)) return false seen.add(it.lib) return true }) await ensurePetDirs() return runSseBatch({ items, concurrency, labelOf: (it) => it.lib, worker: async (it, _index, report) => { const r = await importSinglePet({ lib: it.lib, onProgress: report }) if (r.ok) { logAudit({ userId: ctx.session.user.id, action: 'pet_import', target: 'PetAsset', targetId: 0, after: { lib: it.lib, batch: true }, }) } return { ok: r.ok, warnings: r.warnings, error: r.error } }, }) })