-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinitDemoData.ts
139 lines (120 loc) · 4.22 KB
/
initDemoData.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
import { drizzle } from "drizzle-orm/neon-serverless";
import { Pool, neonConfig } from "@neondatabase/serverless";
import ws from "ws";
import * as schema from "./shared/schema";
// Needed for neon serverless driver to work
neonConfig.webSocketConstructor = ws;
if (!process.env.DATABASE_URL) {
throw new Error("DATABASE_URL must be set");
}
async function main() {
console.log("Creating database connection...");
const pool = new Pool({ connectionString: process.env.DATABASE_URL });
const db = drizzle({ client: pool, schema });
console.log("Adding demo waitlist entries...");
// Create some waitlist entries
const waitlistEntries = [
{
fullName: "John Smith",
email: "john.smith@example.com",
referralCode: "JOIN-JOHN-1234",
referralCount: 5,
createdAt: new Date("2024-03-01")
},
{
fullName: "Alice Johnson",
email: "alice.johnson@example.com",
referralCode: "JOIN-ALICE-5678",
referralCount: 8,
createdAt: new Date("2024-03-02")
},
{
fullName: "Bob Williams",
email: "bob.williams@example.com",
referralCode: "JOIN-BOB-9012",
referralCount: 3,
createdAt: new Date("2024-03-03")
},
{
fullName: "Emma Brown",
email: "emma.brown@example.com",
referralCode: "JOIN-EMMA-3456",
referralCount: 7,
createdAt: new Date("2024-03-04")
},
{
fullName: "Michael Davis",
email: "michael.davis@example.com",
referralCode: "JOIN-MICHAEL-7890",
referralCount: 2,
createdAt: new Date("2024-03-05")
}
];
for (const entry of waitlistEntries) {
try {
await db.insert(schema.waitlistEntries).values(entry).onConflictDoNothing();
} catch (error) {
console.error(`Error inserting waitlist entry for ${entry.email}:`, error);
}
}
console.log("Adding daily waitlist stats...");
// Create daily stats for the last 14 days
const today = new Date();
const dailyStats = [];
for (let i = 13; i >= 0; i--) {
const date = new Date(today);
date.setDate(date.getDate() - i);
dailyStats.push({
date: date,
signupCount: Math.floor(Math.random() * 10) + 5, // 5-15 signups per day
totalReferrals: Math.floor(Math.random() * 15) + 2, // 2-17 referrals per day
conversionRate: Math.floor(Math.random() * 25) + 10, // 10-35% conversion rate
});
}
for (const stat of dailyStats) {
try {
await db.insert(schema.dailyWaitlistStats).values(stat).onConflictDoNothing();
} catch (error) {
console.error(`Error inserting daily stat for ${stat.date}:`, error);
}
}
console.log("Adding geographic stats...");
// Create geographic stats
const regions = [
{ region: "North America", userCount: 250, engagementScore: 85 },
{ region: "Europe", userCount: 180, engagementScore: 78 },
{ region: "Asia", userCount: 220, engagementScore: 82 },
{ region: "South America", userCount: 120, engagementScore: 75 },
{ region: "Africa", userCount: 90, engagementScore: 70 },
{ region: "Oceania", userCount: 60, engagementScore: 80 }
];
for (const regionData of regions) {
try {
await db.insert(schema.geographicStats).values(regionData).onConflictDoNothing();
} catch (error) {
console.error(`Error inserting geographic stat for ${regionData.region}:`, error);
}
}
console.log("Adding referral channels...");
// Create referral channels
const channels = [
{ channelName: "Social Media", referralCount: 120, conversionRate: 35 },
{ channelName: "Email", referralCount: 85, conversionRate: 42 },
{ channelName: "Direct", referralCount: 65, conversionRate: 28 },
{ channelName: "Partner Sites", referralCount: 45, conversionRate: 30 },
{ channelName: "Crypto Forums", referralCount: 30, conversionRate: 25 }
];
for (const channel of channels) {
try {
await db.insert(schema.referralChannels).values(channel).onConflictDoNothing();
} catch (error) {
console.error(`Error inserting referral channel for ${channel.channelName}:`, error);
}
}
console.log("Demo data inserted successfully!");
await pool.end();
}
main().catch((e) => {
console.error("Error inserting demo data:", e);
process.exit(1);
});