如何设计一套基于 API 的会员系统
这一篇文章将完整的描述如何设计一个基于 api 的会员系统,从数据库到代码的实现。
需求
允许用户购买单次,也可以允许用户购买会员,这里以 AI 模型为例子,大致效果图如下。
1、用户可以单次购买其中某一个模型。
2、用户可以购买某一个模型的会员。
模型设计
模型:模型相关信息,例如上图所示的
Chatgpt
,基础表。会员表:会员相关信息,例如上图所示的
Chatgpt会员
,基础表。模型定价表:模型单价,例如上图所示的
20次/元
,基础表。会员定价表:会员权益相关信息,例如上图所示
1000次/188元
,基础表。这里可以衍生出会员可以按照每个月来算 quota。
这里可以设置不同会员,例如年卡,季卡,月卡等。
用户:用户相关信息,业务表。
订单表:订单相关信息,业务表。
用户按次购买的订单
用户按会员购买的订单
用户单次购买表:由订单生成,结合定价表计算出此次订单用户可以使用的额度,业务表。
用户会员表:由订单生成,结合模型定价表计算出此次订单用户可以使用的额度,以及到期时间,业务表。
APIClient 表:保存用户用来访问 api 的 apikey 和 apisecret,业务表。
Usage 表:用户使用记录,业务表。
数据库设计
代码实现
创建订单
创建一个订单的时候,需要将下游表放到一个事务同时创建,可以通过工厂模式来设计下游表的创建。
订单创建示例代码
CompositiveCalculationService 示例代码
ClientCalculationServiceImpl 示例代码
MemberCalculationServiceImpl 示例代码
计算用户可使用次数
查询会员可使用次数
查询单次购买可使用次数
查询用户使用次数
查询用户最终可用次数
记录用户使用
可以通过注解的方式来实现,同样对于数据库 quota 的查询可以重构到 Redis 当中,避免影响查询性能,示例代码:
用户界面查询效果
版权声明: 本文为 InfoQ 作者【Kevin_913】的原创文章。
原文链接:【http://xie.infoq.cn/article/ea975e93d58fdf6b5dc03eec8】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论