import { migrate } from "drizzle-orm/bun-sqlite/migrator"; import path from "node:path"; export default defineNitroPlugin(async (nitroApp) => { const db = useDrizzle(); const migrationsFolder = path.resolve("server/database/migrations"); console.log("Running database migrations..."); console.log(`Migrations folder: ${migrationsFolder}`); migrate(db, { migrationsFolder }); console.log("Database migrations complete"); const feedFile = Bun.file(path.resolve("tmp/feed.json")); const feedData = await feedFile.json().catch((err) => { console.log(err.message); return []; }); for (const item of feedData) { const userId = String(item.user.id); await db .insert(tables.users) .values({ id: userId, name: item.user.name, avatar: item.user.avatar, city: item.user.city, country: item.user.country, sex: item.user.sex, weight: item.user.weight, createdAt: new Date(item.user.created_at), }) .onConflictDoUpdate({ target: tables.users.id, set: { name: item.user.name, avatar: item.user.avatar, city: item.user.city, country: item.user.country, sex: item.user.sex, weight: item.user.weight, }, }); await db .insert(tables.tokens) .values({ userId: userId, refreshToken: item.token.refresh_token, accessToken: item.token.access_token, expiresAt: new Date(item.token.expires_at), }) .onConflictDoUpdate({ target: tables.tokens.userId, set: { refreshToken: item.token.refresh_token, accessToken: item.token.access_token, expiresAt: new Date(item.token.expires_at), }, }); await db .insert(tables.preferences) .values({ userId: userId, data: { enabled: item.preferences.enabled, language: item.preferences.language, units: item.preferences.units, tone: item.preferences.tone, highlights: [], }, }) .onConflictDoUpdate({ target: tables.preferences.userId, set: { data: { enabled: item.preferences.enabled, language: item.preferences.language, units: item.preferences.units, tone: item.preferences.tone, highlights: [], }, }, }); } console.log(`Processed ${feedData.length} feed items`); });