ddstats-server/libs/database/sqlite2mongo/postTasks.js
2021-10-09 23:54:22 +02:00

91 lines
3.2 KiB
JavaScript

import Finish from '../../../schemas/Finish.js'
import Level from '../../../schemas/Level.js'
import Player from '../../../schemas/Player.js'
import initLog from '../../utills/log.js'
import decodeMsgpack from './decodeMsgpack.js'
const log = initLog("sqlite2mongo")
/**
* This handles some post-tasks that run after the initial checks.
* @module libs/database/sqlite2mongo/postTasks
*/
export default async function postTasks() {
log("Post tasks...")
log("Loading cached info from DDNet...")
const cache = decodeMsgpack()
log("Adding total amounts of finishes to maps...")
for (const category in cache.maps) {
for (const i in cache.maps[category]) {
const map = cache.maps[category][i]
const mapFromDB = await Level.findOne({ name: map[0] })
if (!mapFromDB) continue
mapFromDB.totalFinishes = map[2]
mapFromDB.save()
log(`Processed ${category} map ${i + 1}/${cache.maps[category].length} -> «${map[0]}» with ${map[2]} finishes!`)
}
}
log("Processing points for players...")
for (const i in cache.pointsRanks) {
const entry = cache.pointsRanks[i]
const playerFromDB = await Player.findOne({ name: entry[0] })
if (!playerFromDB) continue
playerFromDB.points = entry[1]
playerFromDB.save()
log(`Processed player ${i + 1}/${cache.pointsRanks.length} -> «${entry[0]}» has ${entry[1]} points!`)
}
log("Processing rank points for players...")
for (const i in cache.rankPoints) {
const entry = cache.rankPoints[i]
const playerFromDB = await Player.findOne({ name: entry[0] })
if (!playerFromDB) continue
playerFromDB.rankPoints = entry[1]
playerFromDB.save()
log(`Processed player ${i + 1}/${cache.pointsRanks.length} -> «${entry[0]}» has ${entry[1]} rank points!`)
}
log("Processing team points for players...")
for (const i in cache.teamRankPoints) {
const entry = cache.teamRankPoints[i]
const playerFromDB = await Player.findOne({ name: entry[0] })
if (!playerFromDB) continue
playerFromDB.teamPoints = entry[1]
playerFromDB.save()
log(`Processed player ${i + 1}/${cache.pointsRanks.length} -> «${entry[0]}» has ${entry[1]} team points!`)
}
log("Processing players' points for the last week...")
for (const i of cache.pointsThisWeek) {
const entry = cache.pointsThisWeek[i]
const playerFromDB = await Player.findOne({ name: entry[0] })
if (!playerFromDB) continue
playerFromDB.pointsThisWeek = entry[1]
playerFromDB.save()
log(`Processed player ${i + 1}/${cache.pointsRanks.length} -> «${entry[0]}» got ${entry[1]} points this week!`)
}
log("Processing players' points for the last month...")
for (const i of cache.pointsThisMonth) {
const entry = cache.pointsThisMonth[i]
const playerFromDB = await Player.findOne({ name: entry[0] })
if (!playerFromDB) continue
playerFromDB.pointsThisMonth = entry[1]
playerFromDB.save()
log(`Processed player ${i + 1}/${cache.pointsRanks.length} -> «${entry[0]}» got ${entry[1]} points this month!`)
}
}