68 lines
2.3 KiB
TypeScript
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)
|
|
})()
|