You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将Prisma写法的TypeScript Switch函数转为Drizzle写法求助

将Prisma的Clerk事件处理逻辑转换为Drizzle ORM写法

原Prisma逻辑说明

这段代码用于处理Clerk的user.created事件:

  • 从事件数据中提取用户ID
  • 检查account表中是否已存在该用户ID对应的记录
  • 若不存在,则创建一条关联该用户ID的账户记录

你代码中的问题

  1. 计数查询时,给计数结果的别名是value,但解构时用了count,导致count变量未定义
  2. 原逻辑操作的是account表,你错误地操作了users表
  3. 插入数据时字段名写错,原逻辑需要存入userId,你写成了name

修正后的Drizzle代码

const { id } = evt.data;
const eventType = evt.type;

switch (eventType) {
  case "user.created": {
    // 查询account表中该userId的记录数
    const [{ count = 0 }] = await db
      .select({ count: count(accounts.id) })
      .from(accounts)
      .where(eq(accounts.userId, id!));

    // 如果无对应记录,创建新账户
    if (!count) {
      await db.insert(accounts).values({ userId: id! });
    }
    break;
  }

  default: {
    console.error(`未配置的事件类型: ${eventType}`);
  }
}

关键修正点

  • 确保操作的是account表(对应你的Drizzle Schema中的accounts表)
  • 计数查询的字段别名与解构变量保持一致(统一用count)
  • 插入时使用正确的字段名userId,匹配原逻辑需求
  • 补充break语句避免switch分支穿透(原Prisma代码也遗漏了,建议补上)

内容的提问来源于stack exchange,提问作者user26830065

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 14:48:16