参考手册Workspace 包参考

Credits

积分/点数管理系统,支持余额追踪和交易历史记录

本页是 01MVP 模板的 Workspace 包参考。若你正在按功能启用或改造模板,先看 支付与积分

积分系统需要配合 Prisma 使用。CreditService 的构造函数接收一个 Prisma 客户端实例,确保你的数据库 schema 中有 User.creditBalance 字段和 CreditTransaction 表。运行 pnpm db:generate 生成客户端后再使用。

@01mvp/credits

这是什么

积分(Credits)就是你给用户的一种虚拟点数。用户充钱获得积分,然后用积分去使用你的服务(比如 AI 对话、图片生成等)。

@01mvp/credits 是一套积分管理工具,帮你记录每个用户有多少积分、积分是怎么来怎么去的。底层用数据库事务保证不会出现"扣了两次"或"余额算错"的问题。

能做什么

  • 查余额 -- 随时看某个用户还剩多少积分
  • 加积分 -- 用户充值后,按金额自动加积分
  • 扣积分 -- 用户使用服务时自动扣,余额不够会拒绝
  • 查记录 -- 所有积分变动都有流水记录,谁、什么时候、干了什么、扣了多少
  • 支持多种类型 -- 购买获得、消费扣减、退款返还、管理员赠送、手动调整

怎么配置

不需要额外配置。数据库里已经建好了 User 表(存余额)和 CreditTransaction 表(存流水),直接就能用。

核心 API

CreditService 方法

CreditService 需要传入 Prisma 实例来初始化:

import { CreditService } from "@01mvp/credits";
const creditService = new CreditService(prisma);

Prop

Type

加积分参数(AddCreditsParams)

Prop

Type

扣积分参数(ConsumeCreditsParams)

Prop

Type

AI 积分定价配置(CreditPricingConfig)

用于 AI 服务的积分消耗计算,支持固定和动态两种模式:

Prop

Type

大概原理

  1. 你的代码调用 CreditService(积分服务),传入用户 ID 和操作类型
  2. 服务内部用数据库事务(一次性要么全成功要么全失败)更新用户余额
  3. 同时写一条交易记录到 CreditTransaction 表,记录这笔记分变动
  4. 如果扣积分时余额不够,事务会回滚,不会真的扣

整个过程是"原子的"(atomic),意思是多个操作打包成一个不可分割的整体,避免高并发时出现数据错乱。

相关链接