feat: add asset import services

This commit is contained in:
Simo committed 2026-07-12 19:12:25 +02:00
1 parent 4b596226e0
commit 3497df9dfd
46 files changed
+5383

No files matched your search

+49
View File
@@ -0,0 +1,49 @@
import { randomUUID } from 'node:crypto'
import { siteSettings } from '@/lib/services/site-settings'
export interface CloneSource {
id: string
name: string
furnidataUrl: string
nitroBaseUrl: string
iconBaseUrl: string
}
const KEY = 'clone_sources'
export async function listSources(): Promise<CloneSource[]> {
const raw = (await siteSettings.get(KEY, '[]')) ?? '[]'
try {
const arr = JSON.parse(raw)
return Array.isArray(arr) ? arr : []
} catch {
return []
}
}
export async function upsertSource(
src: Omit<CloneSource, 'id'> & { id?: string },
): Promise<CloneSource> {
const sources = await listSources()
const entry: CloneSource = {
id: src.id || randomUUID(),
name: src.name.trim(),
furnidataUrl: src.furnidataUrl.trim(),
nitroBaseUrl: src.nitroBaseUrl.trim().replace(/\/+$/, ''),
iconBaseUrl: src.iconBaseUrl.trim().replace(/\/+$/, ''),
}
const idx = sources.findIndex((s) => s.id === entry.id)
if (idx >= 0) sources[idx] = entry
else sources.push(entry)
await siteSettings.update(KEY, JSON.stringify(sources))
return entry
}
export async function deleteSource(id: string): Promise<void> {
const sources = (await listSources()).filter((s) => s.id !== id)
await siteSettings.update(KEY, JSON.stringify(sources))
}
export async function getSource(id: string): Promise<CloneSource | null> {
return (await listSources()).find((s) => s.id === id) ?? null
}