task-svr/src/fixIngame.ts
2024-05-15 15:36:26 +08:00

68 lines
2.3 KiB
TypeScript

import mongoose from 'mongoose'
import * as dotenv from 'dotenv'
const envFile = process.env.NODE_ENV && process.env.NODE_ENV === 'production' ? `.env.production` : '.env.development'
dotenv.config({ path: envFile })
console.log(process.env.DB_MAIN)
import { InGameScoreRecord } from 'models/InGameScoreRecord'
import { InGameTaskRecord } from 'models/InGameTaskRecord'
import { InGameStats } from 'models/InGameStats'
import { NftClaimRecord } from 'models/NftClaimRecord'
import { DeleteRecord } from 'models/DeleteRecord'
;(async () => {
try {
let taskRecords = await InGameTaskRecord.find({ ticket: { $gt: 0 } })
let scoreRecords = await InGameScoreRecord.find({ type: 'draw_ingame' })
let claimRecords = await NftClaimRecord.find({})
let taskMap = new Map()
let scoreMap = new Map()
for (let record of taskRecords) {
if (!taskMap.has(record.user)) {
taskMap.set(record.user, 0)
}
taskMap.set(record.user, taskMap.get(record.user) + record.ticket)
}
for (let record of claimRecords) {
if (!taskMap.has(record.user)) {
taskMap.set(record.user, 0)
}
taskMap.set(record.user, taskMap.get(record.user) + 1)
}
for (let record of scoreRecords) {
if (!scoreMap.has(record.user)) {
scoreMap.set(record.user, [])
}
scoreMap.get(record.user).push(record.score)
}
for (let [user, records] of scoreMap) {
if (!taskMap.has(user)) {
console.log('User', user, 'has no task record')
for (let record of records) {
let dRecord = new DeleteRecord({
type: 'ingame_draw',
data: record,
})
await dRecord.save()
await InGameScoreRecord.deleteOne({ _id: record.id })
}
await InGameStats.findOneAndUpdate(
{ user: user },
{ score: 0 },
{
new: false,
upsert: false,
includeResultMetadata: true,
},
)
console.log(`fix user data: ${user}`)
} else if (taskMap.get(user) < records.length) {
console.log('User', user, 'has less task record than score record')
}
}
console.log('Finished repair ingame data in the database')
} catch (e) {
console.log(e)
}
process.exit(0)
})()