black-select-workspaces.ts 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import { Database, eq, and, sql, inArray, isNull, count } from "../src/drizzle/index.js"
  2. import { BillingTable, SubscriptionPlan } from "../src/schema/billing.sql.js"
  3. import { UserTable } from "../src/schema/user.sql.js"
  4. import { AuthTable } from "../src/schema/auth.sql.js"
  5. const plan = process.argv[2] as (typeof SubscriptionPlan)[number]
  6. if (!SubscriptionPlan.includes(plan)) {
  7. console.error("Usage: bun foo.ts <count>")
  8. process.exit(1)
  9. }
  10. const workspaces = await Database.use((tx) =>
  11. tx
  12. .select({ workspaceID: BillingTable.workspaceID })
  13. .from(BillingTable)
  14. .where(and(eq(BillingTable.subscriptionPlan, plan), isNull(BillingTable.timeSubscriptionSelected)))
  15. .orderBy(sql`RAND()`)
  16. .limit(100),
  17. )
  18. console.log(`Found ${workspaces.length} workspaces on Black ${plan} waitlist`)
  19. console.log("== Workspace IDs ==")
  20. const ids = workspaces.map((w) => w.workspaceID)
  21. for (const id of ids) {
  22. console.log(id)
  23. }
  24. console.log("\n== User Emails ==")
  25. const emails = await Database.use((tx) =>
  26. tx
  27. .select({ email: AuthTable.subject })
  28. .from(UserTable)
  29. .innerJoin(AuthTable, and(eq(UserTable.accountID, AuthTable.accountID), eq(AuthTable.provider, "email")))
  30. .where(inArray(UserTable.workspaceID, ids)),
  31. )
  32. const unique = new Set(emails.map((row) => row.email))
  33. for (const email of unique) {
  34. console.log(email)
  35. }