MCPcopy Create free account
hub / github.com/Railly/tinte / syncDevEnvironment

Function syncDevEnvironment

apps/web/scripts/sync-dev-environment.ts:10–156  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

8const sql = neon(process.env.DATABASE_URL!);
9
10async function syncDevEnvironment() {
11 console.log("🔄 Starting dev environment sync...\n");
12
13 try {
14 // Step 1: Sync users from Clerk
15 console.log("📥 Step 1: Fetching users from Clerk (dev)...");
16 const client = await clerkClient();
17 const clerkUsers = await client.users.getUserList({ limit: 500 });
18 console.log(`Found ${clerkUsers.data.length} users in Clerk\n`);
19
20 let created = 0;
21 let updated = 0;
22 let skipped = 0;
23
24 for (const clerkUser of clerkUsers.data) {
25 try {
26 const userId = clerkUser.id;
27 const email = clerkUser.emailAddresses.find(
28 (e) => e.id === clerkUser.primaryEmailAddressId,
29 );
30 const name =
31 clerkUser.fullName ||
32 clerkUser.firstName ||
33 clerkUser.lastName ||
34 null;
35
36 // Check if user exists
37 const existingUser = await sql`
38 SELECT id FROM "user" WHERE id = ${userId}
39 `;
40
41 // Check if email exists
42 const existingEmail = email?.emailAddress
43 ? await sql`SELECT id FROM "user" WHERE email = ${email.emailAddress}`
44 : [];
45
46 if (existingUser.length > 0) {
47 // Update
48 await sql`
49 UPDATE "user"
50 SET
51 name = ${name},
52 email = ${email?.emailAddress || null},
53 email_verified = ${email?.verification?.status === "verified"},
54 image = ${clerkUser.imageUrl || null},
55 updated_at = NOW()
56 WHERE id = ${userId}
57 `;
58 updated++;
59 console.log(`✓ Updated: ${email?.emailAddress || userId}`);
60 } else if (existingEmail.length > 0) {
61 // Skip if email exists with different ID
62 skipped++;
63 console.log(
64 `⚠ Skipped: ${email?.emailAddress} (email already exists)`,
65 );
66 } else {
67 // Create

Callers 1

Calls 1

hasMethod · 0.80

Tested by

no test coverage detected