import { drizzle } from "drizzle-orm/better-sqlite3"; import { migrate } from "drizzle-orm/better-sqlite3/migrator"; import Database from "better-sqlite3"; import { users, tokens, preferences } from "../database/schema"; import { existsSync, readFileSync } from "node:fs"; export default defineNitroPlugin(async () => { const db = useDrizzle(); migrate(db, { migrationsFolder: "./server/database/migrations" }); console.log("Database migrations applied"); const feedPath = "./tmp/feed.json"; if (existsSync(feedPath)) { const feed = JSON.parse(readFileSync(feedPath, "utf-8")); console.log(`Importing ${feed.length} users from feed.json`); for (const entry of feed) { const userId = String(entry.user.id); const createdAt = entry.user.created_at && entry.user.created_at !== "\r" ? new Date(entry.user.created_at) : new Date(); const userData = { id: userId, name: entry.user.name || "Unknown", avatar: entry.user.avatar || null, city: entry.user.city || null, country: typeof entry.user.country === "string" && entry.user.country !== "\r" ? entry.user.country : null, sex: typeof entry.user.sex === "string" && entry.user.sex !== "\r" ? entry.user.sex : null, weight: Number(entry.user.weight) || null, createdAt, }; await db .insert(users) .values(userData) .onConflictDoUpdate({ target: users.id, set: { ...userData }, }); const tokenData = { userId: userId, refreshToken: entry.token.refresh_token || null, accessToken: entry.token.access_token || null, expiresAt: new Date(entry.token.expires_at), }; await db .insert(tokens) .values(tokenData) .onConflictDoUpdate({ target: tokens.userId, set: { ...tokenData }, }); const prefsData = { userId, data: { enabled: entry.preferences.enabled ?? true, language: entry.preferences.language || "English", units: entry.preferences.units || "Metric", tone: entry.preferences.tone || [], highlights: entry.preferences.highlights || [], }, }; await db .insert(preferences) .values(prefsData) .onConflictDoUpdate({ target: preferences.userId, set: { ...prefsData }, }); } console.log(`Successfully imported ${feed.length} users`); } });