🎁 B站直播间礼物统计系统

Next.js + TypeScript + Prisma + MySQL + B站直播WS + 签到积分商城

🚀 快速开始

# 1. 配置数据库(修改 .env 文件)
DATABASE_URL="mysql://root:password@localhost:3306/bilibili_gift_db"

# 2. 创建数据库并运行迁移
pnpm prisma migrate dev --name init

# 3. 生成 Prisma Client
pnpm prisma generate

# 4. 启动开发服务器
pnpm dev

# 5. 创建直播间
POST /api/rooms
{ "roomId": "12345", "name": "测试直播间", "streamerName": "主播名" }

# 6. 连接直播间 WebSocket(开始接收礼物)
POST /api/live
{ "roomId": "12345" }

# 7. 每日凌晨自动统计签到(手动触发)
POST /api/checkin
{ "date": "2024-01-01", "secret": "your-cron-secret" }

📅 签到系统自动判定

🎯 签到规则

  • 每日礼物价值超过 100 电池 且排名前 30 名 自动签到
  • 每日签到获得 1 积分
  • 连续 7 天签到,第 7 天获得 81 积分
  • 连续 30 天签到,第 30 天获得 188 积分
  • 连续 100 天签到,赠送 500 积分代金券(有效期 30 天)
  • 可使用 补签卡 补签最近 7 天内的日期
方法端点描述
GET/api/checkin?userId=1获取用户签到记录(支持 ?yearMonth=2024-01)
GET/api/checkin/stats?userId=1获取用户签到统计(总次数、连续天数等)
POST/api/checkin触发签到统计(定时任务调用){ date, secret }
POST/api/checkin/manual使用补签卡补签 { userId, date, inventoryId }

💰 积分系统

方法端点描述
GET/api/points?userId=1获取用户积分信息
GET/api/points/records?userId=1获取积分记录(支持 ?type=checkin)
POST/api/points管理员调整积分 { userId, points, description, adminSecret }

🛒 商城系统

方法端点描述
GET/api/shop/products获取商品列表(支持 ?isOnSale=true)
GET/api/shop/products/:id获取商品详情
POST/api/shop/orders购买商品 { userId, productId, quantity }
GET/api/shop/orders?userId=1获取订单列表

🎒 道具与背包

方法端点描述
GET/api/items获取道具列表(支持 ?type=VOUCHER)
GET/api/inventory?userId=1获取用户背包(未使用的道具)
GET/api/vouchers?userId=1获取用户代金券(支持 ?status=unused)
POST/api/vouchers使用代金券兑换积分 { userId, voucherId }

🔴 直播间 WebSocket 连接

方法端点描述
GET/api/live获取所有直播间连接状态
POST/api/live连接直播间 WebSocket { "roomId": "12345" }
DELETE/api/live?roomId=12345断开直播间连接

📺 直播间管理

方法端点描述
GET/api/rooms获取直播间列表
POST/api/rooms创建直播间
GET/api/rooms/:id获取直播间详情

🎁 礼物记录

方法端点描述
GET/api/gifts获取礼物记录
GET/api/stats?roomId=1获取直播间统计和排行榜

📖 完整使用示例

# ========== 1. 直播间礼物统计 ==========

# 创建直播间
POST /api/rooms
{ "roomId": "12345", "name": "测试直播间", "streamerName": "主播名" }

# 连接直播间 WebSocket
POST /api/live
{ "roomId": "12345" }

# 查看礼物记录
GET /api/gifts?roomId=1

# ========== 2. 签到系统 ==========

# 每日凌晨触发签到统计(定时任务)
POST /api/checkin
{ "date": "2024-01-01", "secret": "your-cron-secret" }

# 查看签到记录
GET /api/checkin?userId=1&yearMonth=2024-01

# 查看签到统计
GET /api/checkin/stats?userId=1

# 购买补签卡
POST /api/shop/orders
{ "userId": 1, "productId": 1, "quantity": 1 }

# 使用补签卡补签
POST /api/checkin/manual
{ "userId": 1, "date": "2024-01-15", "inventoryId": 1 }

# ========== 3. 积分与商城 ==========

# 查看积分
GET /api/points?userId=1

# 查看积分记录
GET /api/points/records?userId=1

# 查看商品列表
GET /api/shop/products

# 购买商品
POST /api/shop/orders
{ "userId": 1, "productId": 1, "quantity": 1 }

# 查看背包
GET /api/inventory?userId=1

# 查看代金券
GET /api/vouchers?userId=1&status=unused

# 使用代金券
POST /api/vouchers
{ "userId": 1, "voucherId": 1 }

🗄️ 数据模型

签到系统

  • CheckIn - 签到记录
  • PointRecord - 积分记录

商城系统

  • Product - 商品
  • Order - 订单
  • Item - 道具定义

用户资产

  • UserInventory - 背包
  • Voucher - 代金券