From 7703dc0c2e0071aef2c813743b390629c438fb94 Mon Sep 17 00:00:00 2001 From: kimjaehyeon0101 <47347352-kimjaehyeon0101@users.noreply.replit.com> Date: Mon, 13 Oct 2025 08:29:01 +0000 Subject: [PATCH] Add script to export all platform data to a file Creates a new TypeScript script `scripts/export-data.ts` that queries all tables from the database (sessions, users, mediaOutlets, articles, predictionMarkets, auctions, bids, mediaOutletRequests, comments, predictionBets) and writes the data to a JSON file. Replit-Commit-Author: Agent Replit-Commit-Session-Id: aabe2db1-f078-4501-aab5-be145ebc6b9a Replit-Commit-Checkpoint-Type: intermediate_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/3df548ff-50ae-432f-9be4-25d34eccc983/aabe2db1-f078-4501-aab5-be145ebc6b9a/TqVS1Ec --- scripts/export-data.ts | 153 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 scripts/export-data.ts diff --git a/scripts/export-data.ts b/scripts/export-data.ts new file mode 100644 index 0000000..808d17b --- /dev/null +++ b/scripts/export-data.ts @@ -0,0 +1,153 @@ +import { db } from "../server/db"; +import { + sessions, + users, + mediaOutlets, + articles, + predictionMarkets, + auctions, + bids, + mediaOutletRequests, + comments, + predictionBets, +} from "../shared/schema"; +import { writeFileSync } from "fs"; +import { join } from "path"; + +interface ExportData { + exportDate: string; + version: "1.0.0"; + tables: { + sessions: any[]; + users: any[]; + mediaOutlets: any[]; + articles: any[]; + predictionMarkets: any[]; + auctions: any[]; + bids: any[]; + mediaOutletRequests: any[]; + comments: any[]; + predictionBets: any[]; + }; + metadata: { + totalRecords: number; + tableStats: Record; + }; +} + +async function exportData() { + console.log("šŸš€ Starting data export...\n"); + + try { + // Export data from all tables in dependency order + console.log("šŸ“Š Exporting sessions..."); + const sessionsData = await db.select().from(sessions); + console.log(` āœ… Exported ${sessionsData.length} sessions`); + + console.log("šŸ“Š Exporting users..."); + const usersData = await db.select().from(users); + console.log(` āœ… Exported ${usersData.length} users`); + + console.log("šŸ“Š Exporting media outlets..."); + const mediaOutletsData = await db.select().from(mediaOutlets); + console.log(` āœ… Exported ${mediaOutletsData.length} media outlets`); + + console.log("šŸ“Š Exporting articles..."); + const articlesData = await db.select().from(articles); + console.log(` āœ… Exported ${articlesData.length} articles`); + + console.log("šŸ“Š Exporting prediction markets..."); + const predictionMarketsData = await db.select().from(predictionMarkets); + console.log(` āœ… Exported ${predictionMarketsData.length} prediction markets`); + + console.log("šŸ“Š Exporting auctions..."); + const auctionsData = await db.select().from(auctions); + console.log(` āœ… Exported ${auctionsData.length} auctions`); + + console.log("šŸ“Š Exporting bids..."); + const bidsData = await db.select().from(bids); + console.log(` āœ… Exported ${bidsData.length} bids`); + + console.log("šŸ“Š Exporting media outlet requests..."); + const mediaOutletRequestsData = await db.select().from(mediaOutletRequests); + console.log(` āœ… Exported ${mediaOutletRequestsData.length} media outlet requests`); + + console.log("šŸ“Š Exporting comments..."); + const commentsData = await db.select().from(comments); + console.log(` āœ… Exported ${commentsData.length} comments`); + + console.log("šŸ“Š Exporting prediction bets..."); + const predictionBetsData = await db.select().from(predictionBets); + console.log(` āœ… Exported ${predictionBetsData.length} prediction bets`); + + // Prepare export data + const totalRecords = + sessionsData.length + + usersData.length + + mediaOutletsData.length + + articlesData.length + + predictionMarketsData.length + + auctionsData.length + + bidsData.length + + mediaOutletRequestsData.length + + commentsData.length + + predictionBetsData.length; + + const exportData: ExportData = { + exportDate: new Date().toISOString(), + version: "1.0.0", + tables: { + sessions: sessionsData, + users: usersData, + mediaOutlets: mediaOutletsData, + articles: articlesData, + predictionMarkets: predictionMarketsData, + auctions: auctionsData, + bids: bidsData, + mediaOutletRequests: mediaOutletRequestsData, + comments: commentsData, + predictionBets: predictionBetsData, + }, + metadata: { + totalRecords, + tableStats: { + sessions: sessionsData.length, + users: usersData.length, + mediaOutlets: mediaOutletsData.length, + articles: articlesData.length, + predictionMarkets: predictionMarketsData.length, + auctions: auctionsData.length, + bids: bidsData.length, + mediaOutletRequests: mediaOutletRequestsData.length, + comments: commentsData.length, + predictionBets: predictionBetsData.length, + }, + }, + }; + + // Generate filename with timestamp + const timestamp = new Date().toISOString().replace(/[:.]/g, '-').split('T')[0]; + const filename = `data-export-${timestamp}.json`; + const filepath = join(process.cwd(), filename); + + // Write to file + console.log(`\nšŸ’¾ Writing data to ${filename}...`); + writeFileSync(filepath, JSON.stringify(exportData, null, 2), 'utf-8'); + + console.log(`\nāœ… Export completed successfully!`); + console.log(`\nšŸ“ File saved to: ${filepath}`); + console.log(`šŸ“Š Total records exported: ${totalRecords}`); + console.log(`\nšŸ“ˆ Table breakdown:`); + Object.entries(exportData.metadata.tableStats).forEach(([table, count]) => { + console.log(` - ${table}: ${count} records`); + }); + + process.exit(0); + } catch (error) { + console.error("\nāŒ Error during export:", error); + process.exit(1); + } +} + +// Run export +exportData();