49 lines
1.6 KiB
TypeScript
49 lines
1.6 KiB
TypeScript
/**
|
||
* O1 数据层冒烟:集合、索引、写入与 admin 查询路径(WM-O1)
|
||
* 执行:cd 玩值电竞App && pnpm exec tsx scripts/verify-o1-data-smoke.ts
|
||
*/
|
||
import { ObjectId } from "mongodb"
|
||
import { getDb, closeMongo } from "../lib/mongodb/client"
|
||
import { COLLECTIONS } from "../lib/db/mongo/collections"
|
||
|
||
async function main() {
|
||
const db = await getDb()
|
||
const collName = COLLECTIONS.userJourneyEvents
|
||
const idx = await db.collection(collName).indexes()
|
||
const hasStreamerIdx = idx.some((i) => i.name === "props_streamerId_occurredAt_-1")
|
||
console.log("[indexes] userJourneyEvents props_streamerId:", hasStreamerIdx ? "OK" : "MISSING")
|
||
|
||
const testUserId = new ObjectId()
|
||
const sid = "69a03c9d0c31b38c1d842ae6"
|
||
const now = new Date()
|
||
await db.collection(collName).insertOne({
|
||
userId: testUserId,
|
||
sessionId: "smoke_sess",
|
||
clientEventId: `smoke_${Date.now()}`,
|
||
eventName: "live.audience.like",
|
||
properties: { streamerId: sid, surface: "smoke" },
|
||
source: "app",
|
||
occurredAt: now,
|
||
receivedAt: now,
|
||
})
|
||
const found = await db
|
||
.collection(collName)
|
||
.find({ userId: testUserId })
|
||
.sort({ occurredAt: -1 })
|
||
.limit(3)
|
||
.toArray()
|
||
console.log("[mongo] inserted + read back:", found.length, "events")
|
||
|
||
const rfm = await db.collection(COLLECTIONS.rfmRuleSets).countDocuments()
|
||
const scores = await db.collection(COLLECTIONS.rfmUserScores).countDocuments()
|
||
console.log("[mongo] rfmRuleSets count:", rfm, "rfmUserScores:", scores)
|
||
|
||
await closeMongo()
|
||
console.log("[done] test userId for manual admin check:", testUserId.toString())
|
||
}
|
||
|
||
main().catch((e) => {
|
||
console.error(e)
|
||
process.exit(1)
|
||
})
|