import { dbGlobal } from "drizzle-pkg/lib/db"; import { tools } from "drizzle-pkg/lib/schema/content"; import { eq, asc } from "drizzle-orm"; // ============ Types ============ export interface CreateToolInput { name: string; slug: string; icon?: string; sortOrder?: number; } export interface UpdateToolInput { name?: string; slug?: string; icon?: string | null; sortOrder?: number; } // ============ Helpers ============ function uuid() { return crypto.randomUUID(); } // ============ CRUD ============ export async function listTools() { const rows = await dbGlobal .select() .from(tools) .orderBy(asc(tools.sortOrder), asc(tools.name)); return rows; } export async function getToolById(id: string) { const rows = await dbGlobal .select() .from(tools) .where(eq(tools.id, id)) .limit(1); return rows[0] ?? null; } export async function createTool(input: CreateToolInput) { const id = uuid(); await dbGlobal.insert(tools).values({ id, name: input.name, slug: input.slug, icon: input.icon ?? null, sortOrder: input.sortOrder ?? 0, }); return getToolById(id); } export async function updateTool(id: string, input: UpdateToolInput) { const existing = await getToolById(id); if (!existing) return null; await dbGlobal .update(tools) .set({ ...(input.name !== undefined && { name: input.name }), ...(input.slug !== undefined && { slug: input.slug }), ...(input.icon !== undefined && { icon: input.icon }), ...(input.sortOrder !== undefined && { sortOrder: input.sortOrder }), }) .where(eq(tools.id, id)); return getToolById(id); } export async function deleteTool(id: string) { await dbGlobal.delete(tools).where(eq(tools.id, id)); }