参考手册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
大概原理
- 你的代码调用
CreditService(积分服务),传入用户 ID 和操作类型 - 服务内部用数据库事务(一次性要么全成功要么全失败)更新用户余额
- 同时写一条交易记录到
CreditTransaction表,记录这笔记分变动 - 如果扣积分时余额不够,事务会回滚,不会真的扣
整个过程是"原子的"(atomic),意思是多个操作打包成一个不可分割的整体,避免高并发时出现数据错乱。
相关链接
- 支付与积分指南 -- 了解如何和支付系统配合
- @01mvp/payment 包 -- 支付服务
- @01mvp/auth 包 -- 用户认证