UNPKG

ql-stats-models

Version:

Document schemas for Quake Live Statistics and Ranks

553 lines (508 loc) 25.2 kB
var Promise = require('bluebird'), mongoose = require('mongoose'), Schema = mongoose.Schema, gameStatsSchemaDefinition = require('./schemas/stats-schema-definition'); /* My goal with this schema is to have the api consumer create a game stats document from the quake live event data, and use the game stats document to increment dependent counter like player och global overall stats. Create game stats object, use the game stats id object as reference to it's parent document update parent document */ module.exports = function (db) { var GameStats, gameStatsSchema = new Schema(gameStatsSchemaDefinition); gameStatsSchema.statics.updateWithGameStats = function (source, targets) { var query = { _id: { $in: targets } }, update = { $inc: { count: 1, play_time: source.play_time, win: source.win, lose: source.lose, quit: source.quit, kills: source.kills, deaths: source.deaths, damage_dealt: source.damage_dealt, damage_taken: source.damage_taken, accuracy: source.accuracy, assists: source.assists, captures: source.captures, combokill: source.combokill, defends: source.defends, excellent: source.excellent, firstfrag: source.firstfrag, headshot: source.headshot, humiliation: source.humiliation, impressive: source.impressive, midair: source.midair, perfect: source.perfect, perforated: source.perforated, quadgod: source.quadgod, rampage: source.rampage, revenge: source.revenge, ammo: source.ammo, armor: source.armor, armor_regen: source.armor_regen, battlesuit: source.battlesuit, doubler: source.doubler, flight: source.flight, green_armor: source.green_armor, guard: source.guard, haste: source.haste, health: source.health, invis: source.invis, invulnerability: source.invulnerability, kamikaze: source.kamikaze, medkit: source.medkit, mega_health: source.mega_health, other_holdable: source.other_holdable, other_powerup: source.other_powerup, portal: source.portal, quad: source.quad, red_armor: source.red_armor, regen: source.regen, scout: source.scout, teleporter: source.teleporter, yellow_armor: source.yellow_armor, gauntlet_d: source.gauntlet_d, gauntlet_dg: source.gauntlet_dg, gauntlet_dr: source.gauntlet_dr, gauntlet_h: source.gauntlet_h, gauntlet_k: source.gauntlet_k, gauntlet_p: source.gauntlet_p, gauntlet_s: source.gauntlet_s, gauntlet_t: source.gauntlet_t, rocket_p: source.rocket_p, rocket_k: source.rocket_k, rocket_d: source.rocket_d, rocket_s: source.rocket_s, rocket_h: source.rocket_h, rocket_t: source.rocket_t, rocket_dg: source.rocket_dg, rocket_dr: source.rocket_dr, lightning_p: source.lightning_p, lightning_k: source.lightning_k, lightning_d: source.lightning_d, lightning_s: source.lightning_s, lightning_h: source.lightning_h, lightning_t: source.lightning_t, lightning_dg: source.lightning_dg, lightning_dr: source.lightning_dr, railgun_p: source.railgun_p, railgun_k: source.railgun_k, railgun_d: source.railgun_d, railgun_s: source.railgun_s, railgun_h: source.railgun_h, railgun_t: source.railgun_t, railgun_dg: source.railgun_dg, railgun_dr: source.railgun_dr, plasma_p: source.plasma_p, plasma_k: source.plasma_k, plasma_d: source.plasma_d, plasma_s: source.plasma_s, plasma_h: source.plasma_h, plasma_t: source.plasma_t, plasma_dg: source.plasma_dg, plasma_dr: source.plasma_dr, grenade_p: source.grenade_p, grenade_k: source.grenade_k, grenade_d: source.grenade_d, grenade_s: source.grenade_s, grenade_h: source.grenade_h, grenade_t: source.grenade_t, grenade_dg: source.grenade_dg, grenade_dr: source.grenade_dr, bfg_p: source.bfg_p, bfg_k: source.bfg_k, bfg_d: source.bfg_d, bfg_s: source.bfg_s, bfg_h: source.bfg_h, bfg_t: source.bfg_t, bfg_dg: source.bfg_dg, bfg_dr: source.bfg_dr, hmg_p: source.hmg_p, hmg_k: source.hmg_k, hmg_d: source.hmg_d, hmg_s: source.hmg_s, hmg_h: source.hmg_h, hmg_t: source.hmg_t, hmg_dg: source.hmg_dg, hmg_dr: source.hmg_dr, chaingun_p: source.chaingun_p, chaingun_k: source.chaingun_k, chaingun_d: source.chaingun_d, chaingun_s: source.chaingun_s, chaingun_h: source.chaingun_h, chaingun_t: source.chaingun_t, chaingun_dg: source.chaingun_dg, chaingun_dr: source.chaingun_dr, nailgun_p: source.nailgun_p, nailgun_k: source.nailgun_k, nailgun_d: source.nailgun_d, nailgun_s: source.nailgun_s, nailgun_h: source.nailgun_h, nailgun_t: source.nailgun_t, nailgun_dg: source.nailgun_dg, nailgun_dr: source.nailgun_dr, proximitymine_p: source.proximitymine_p, proximitymine_k: source.proximitymine_k, proximitymine_d: source.proximitymine_d, proximitymine_s: source.proximitymine_s, proximitymine_h: source.proximitymine_h, proximitymine_t: source.proximitymine_t, proximitymine_dg: source.proximitymine_dg, proximitymine_dr: source.proximitymine_dr, shotgun_p: source.shotgun_p, shotgun_k: source.shotgun_k, shotgun_d: source.shotgun_d, shotgun_s: source.shotgun_s, shotgun_h: source.shotgun_h, shotgun_t: source.shotgun_t, shotgun_dg: source.shotgun_dg, shotgun_dr: source.shotgun_dr, other_p: source.other_p, other_k: source.other_k, other_d: source.other_d, other_s: source.other_s, other_h: source.other_h, other_t: source.other_t, other_dg: source.other_dg, other_dr: source.other_dr } }; return GameStats.update(query, update, { multi: true }) }; gameStatsSchema.statics.createWithPlayerStats = function (playerStats) { var gameStats = new GameStats({ // general count: 1, play_time: playerStats.DATA.PLAY_TIME, win: playerStats.DATA.WIN, quit: playerStats.DATA.QUIT, lose: playerStats.DATA.LOSE, kills: playerStats.DATA.KILLS, deaths: playerStats.DATA.DEATHS, damage_dealt: playerStats.DATA.DAMAGE.DEALT, damage_taken: playerStats.DATA.DAMAGE.TAKEN, max_streak: playerStats.DATA.MAX_STREAK, // medals accuracy: playerStats.DATA.MEDALS.ACCURACY, assists: playerStats.DATA.MEDALS.ASSISTS, captures: playerStats.DATA.MEDALS.CAPTURES, combokill: playerStats.DATA.MEDALS.COMBOKILL, defends: playerStats.DATA.MEDALS.DEFENDS, excellent: playerStats.DATA.MEDALS.EXCELLENT, firstfrag: playerStats.DATA.MEDALS.FIRSTFRAG, headshot: playerStats.DATA.MEDALS.HEADSHOT, humiliation: playerStats.DATA.MEDALS.HUMILIATION, impressive: playerStats.DATA.MEDALS.IMPRESSIVE, midair: playerStats.DATA.MEDALS.MIDAIR, perfect: playerStats.DATA.MEDALS.PERFECT, perforated: playerStats.DATA.MEDALS.PERFORATED, quadgod: playerStats.DATA.MEDALS.QUADGOD, rampage: playerStats.DATA.MEDALS.RAMPAGE, revenge: playerStats.DATA.MEDALS.REVENGE, // pickups ammo: playerStats.DATA.PICKUPS.AMMO, armor: playerStats.DATA.PICKUPS.ARMOR, armor_regen: playerStats.DATA.PICKUPS.ARMOR_REGEN, battlesuit: playerStats.DATA.PICKUPS.BATTLESUIT, doubler: playerStats.DATA.PICKUPS.DOUBLER, flight: playerStats.DATA.PICKUPS.FLIGHT, green_armor: playerStats.DATA.PICKUPS.GREEN_ARMOR, guard: playerStats.DATA.PICKUPS.GUARD, haste: playerStats.DATA.PICKUPS.HASTE, health: playerStats.DATA.PICKUPS.HEALTH, invis: playerStats.DATA.PICKUPS.INVIS, invulnerability: playerStats.DATA.PICKUPS.INVULNERABILITY, kamikaze: playerStats.DATA.PICKUPS.KAMIKAZE, medkit: playerStats.DATA.PICKUPS.MEDKIT, mega_health: playerStats.DATA.PICKUPS.MEGA_HEALTH, other_holdable: playerStats.DATA.PICKUPS.OTHER_HOLDABLE, other_powerup: playerStats.DATA.PICKUPS.OTHER_POWERUP, portal: playerStats.DATA.PICKUPS.PORTAL, quad: playerStats.DATA.PICKUPS.QUAD, red_armor: playerStats.DATA.PICKUPS.RED_ARMOR, regen: playerStats.DATA.PICKUPS.REGEN, scout: playerStats.DATA.PICKUPS.SCOUT, teleporter: playerStats.DATA.PICKUPS.TELEPORTER, yellow_armor: playerStats.DATA.PICKUPS.YELLOW_ARMOR, // weapons gauntlet_d: playerStats.DATA.WEAPONS.GAUNTLET.D, gauntlet_dg: playerStats.DATA.WEAPONS.GAUNTLET.DG, gauntlet_dr: playerStats.DATA.WEAPONS.GAUNTLET.DR, gauntlet_h: playerStats.DATA.WEAPONS.GAUNTLET.H, gauntlet_k: playerStats.DATA.WEAPONS.GAUNTLET.K, gauntlet_p: playerStats.DATA.WEAPONS.GAUNTLET.P, gauntlet_s: playerStats.DATA.WEAPONS.GAUNTLET.S, gauntlet_t: playerStats.DATA.WEAPONS.GAUNTLET.T, rocket_p: playerStats.DATA.WEAPONS.ROCKET.P, rocket_k: playerStats.DATA.WEAPONS.ROCKET.K, rocket_d: playerStats.DATA.WEAPONS.ROCKET.D, rocket_s: playerStats.DATA.WEAPONS.ROCKET.S, rocket_h: playerStats.DATA.WEAPONS.ROCKET.H, rocket_t: playerStats.DATA.WEAPONS.ROCKET.T, rocket_dg: playerStats.DATA.WEAPONS.ROCKET.DG, rocket_dr: playerStats.DATA.WEAPONS.ROCKET.DR, lightning_p: playerStats.DATA.WEAPONS.LIGHTNING.P, lightning_k: playerStats.DATA.WEAPONS.LIGHTNING.K, lightning_d: playerStats.DATA.WEAPONS.LIGHTNING.D, lightning_s: playerStats.DATA.WEAPONS.LIGHTNING.S, lightning_h: playerStats.DATA.WEAPONS.LIGHTNING.H, lightning_t: playerStats.DATA.WEAPONS.LIGHTNING.T, lightning_dg: playerStats.DATA.WEAPONS.LIGHTNING.DG, lightning_dr: playerStats.DATA.WEAPONS.LIGHTNING.DR, railgun_p: playerStats.DATA.WEAPONS.RAILGUN.P, railgun_k: playerStats.DATA.WEAPONS.RAILGUN.K, railgun_d: playerStats.DATA.WEAPONS.RAILGUN.D, railgun_s: playerStats.DATA.WEAPONS.RAILGUN.S, railgun_h: playerStats.DATA.WEAPONS.RAILGUN.H, railgun_t: playerStats.DATA.WEAPONS.RAILGUN.T, railgun_dg: playerStats.DATA.WEAPONS.RAILGUN.DG, railgun_dr: playerStats.DATA.WEAPONS.RAILGUN.DR, plasma_p: playerStats.DATA.WEAPONS.PLASMA.P, plasma_k: playerStats.DATA.WEAPONS.PLASMA.K, plasma_d: playerStats.DATA.WEAPONS.PLASMA.D, plasma_s: playerStats.DATA.WEAPONS.PLASMA.S, plasma_h: playerStats.DATA.WEAPONS.PLASMA.H, plasma_t: playerStats.DATA.WEAPONS.PLASMA.T, plasma_dg: playerStats.DATA.WEAPONS.PLASMA.DG, plasma_dr: playerStats.DATA.WEAPONS.PLASMA.DR, grenade_p: playerStats.DATA.WEAPONS.GRENADE.P, grenade_k: playerStats.DATA.WEAPONS.GRENADE.K, grenade_d: playerStats.DATA.WEAPONS.GRENADE.D, grenade_s: playerStats.DATA.WEAPONS.GRENADE.S, grenade_h: playerStats.DATA.WEAPONS.GRENADE.H, grenade_t: playerStats.DATA.WEAPONS.GRENADE.T, grenade_dg: playerStats.DATA.WEAPONS.GRENADE.DG, grenade_dr: playerStats.DATA.WEAPONS.GRENADE.DR, bfg_p: playerStats.DATA.WEAPONS.BFG.P, bfg_k: playerStats.DATA.WEAPONS.BFG.K, bfg_d: playerStats.DATA.WEAPONS.BFG.D, bfg_s: playerStats.DATA.WEAPONS.BFG.S, bfg_h: playerStats.DATA.WEAPONS.BFG.H, bfg_t: playerStats.DATA.WEAPONS.BFG.T, bfg_dg: playerStats.DATA.WEAPONS.BFG.DG, bfg_dr: playerStats.DATA.WEAPONS.BFG.DR, hmg_p: playerStats.DATA.WEAPONS.HMG.P, hmg_k: playerStats.DATA.WEAPONS.HMG.K, hmg_d: playerStats.DATA.WEAPONS.HMG.D, hmg_s: playerStats.DATA.WEAPONS.HMG.S, hmg_h: playerStats.DATA.WEAPONS.HMG.H, hmg_t: playerStats.DATA.WEAPONS.HMG.T, hmg_dg: playerStats.DATA.WEAPONS.HMG.DG, hmg_dr: playerStats.DATA.WEAPONS.HMG.DR, chaingun_p: playerStats.DATA.WEAPONS.CHAINGUN.P, chaingun_k: playerStats.DATA.WEAPONS.CHAINGUN.K, chaingun_d: playerStats.DATA.WEAPONS.CHAINGUN.D, chaingun_s: playerStats.DATA.WEAPONS.CHAINGUN.S, chaingun_h: playerStats.DATA.WEAPONS.CHAINGUN.H, chaingun_t: playerStats.DATA.WEAPONS.CHAINGUN.T, chaingun_dg: playerStats.DATA.WEAPONS.CHAINGUN.DG, chaingun_dr: playerStats.DATA.WEAPONS.CHAINGUN.DR, nailgun_p: playerStats.DATA.WEAPONS.NAILGUN.P, nailgun_k: playerStats.DATA.WEAPONS.NAILGUN.K, nailgun_d: playerStats.DATA.WEAPONS.NAILGUN.D, nailgun_s: playerStats.DATA.WEAPONS.NAILGUN.S, nailgun_h: playerStats.DATA.WEAPONS.NAILGUN.H, nailgun_t: playerStats.DATA.WEAPONS.NAILGUN.T, nailgun_dg: playerStats.DATA.WEAPONS.NAILGUN.DG, nailgun_dr: playerStats.DATA.WEAPONS.NAILGUN.DR, proximitymine_p: playerStats.DATA.WEAPONS.PROXMINE.P, proximitymine_k: playerStats.DATA.WEAPONS.PROXMINE.K, proximitymine_d: playerStats.DATA.WEAPONS.PROXMINE.D, proximitymine_s: playerStats.DATA.WEAPONS.PROXMINE.S, proximitymine_h: playerStats.DATA.WEAPONS.PROXMINE.H, proximitymine_t: playerStats.DATA.WEAPONS.PROXMINE.T, proximitymine_dg: playerStats.DATA.WEAPONS.PROXMINE.DG, proximitymine_dr: playerStats.DATA.WEAPONS.PROXMINE.DR, shotgun_p: playerStats.DATA.WEAPONS.SHOTGUN.P, shotgun_k: playerStats.DATA.WEAPONS.SHOTGUN.K, shotgun_d: playerStats.DATA.WEAPONS.SHOTGUN.D, shotgun_s: playerStats.DATA.WEAPONS.SHOTGUN.S, shotgun_h: playerStats.DATA.WEAPONS.SHOTGUN.H, shotgun_t: playerStats.DATA.WEAPONS.SHOTGUN.T, shotgun_dg: playerStats.DATA.WEAPONS.SHOTGUN.DG, shotgun_dr: playerStats.DATA.WEAPONS.SHOTGUN.DR, other_p: playerStats.DATA.WEAPONS.OTHER_WEAPON.P, other_k: playerStats.DATA.WEAPONS.OTHER_WEAPON.K, other_d: playerStats.DATA.WEAPONS.OTHER_WEAPON.D, other_s: playerStats.DATA.WEAPONS.OTHER_WEAPON.S, other_h: playerStats.DATA.WEAPONS.OTHER_WEAPON.H, other_t: playerStats.DATA.WEAPONS.OTHER_WEAPON.T, other_dg: playerStats.DATA.WEAPONS.OTHER_WEAPON.DG, other_dr: playerStats.DATA.WEAPONS.OTHER_WEAPON.DR }); return gameStats.save().then(); }; gameStatsSchema.methods.incrementWithGameStats = function (gameStats) { var incrementQuery = { $inc: { // general count: 1, play_time: gameStats.play_time, win: gameStats.win, quit: gameStats.quit, lose: gameStats.lose, kills: gameStats.kills, deaths: gameStats.deaths, damage_dealt: gameStats.damage_dealt, damage_taken: gameStats.damage_taken, max_streak: gameStats.max_streak, // accuracy: gameStats.accuracy, assists: gameStats.assists, captures: gameStats.captures, combokill: gameStats.combokill, defends: gameStats.defends, excellent: gameStats.excellent, firstfrag: gameStats.firstfrag, headshot: gameStats.headshot, humiliation: gameStats.humiliation, impressive: gameStats.impressive, midair: gameStats.midair, perfect: gameStats.perfect, perforated: gameStats.perforated, quadgod: gameStats.quadgod, rampage: gameStats.rampage, revenge: gameStats.revenge, // ammo: gameStats.ammo, armor: gameStats.armor, armor_regen: gameStats.armor_regen, battlesuit: gameStats.battlesuit, doubler: gameStats.doubler, flight: gameStats.flight, green_armor: gameStats.green_armor, guard: gameStats.guard, haste: gameStats.haste, health: gameStats.health, invis: gameStats.invis, invulnerability: gameStats.invulnerability, kamikaze: gameStats.kamikaze, medkit: gameStats.medkit, mega_health: gameStats.mega_health, other_holdable: gameStats.other_holdable, other_powerup: gameStats.other_powerup, portal: gameStats.portal, quad: gameStats.quad, red_armor: gameStats.red_armor, regen: gameStats.regen, scout: gameStats.scout, teleporter: gameStats.teleporter, yellow_armor: gameStats.yellow_armor, gauntlet_d: gameStats.gauntlet_d, gauntlet_dg: gameStats.gauntlet_dg, gauntlet_dr: gameStats.gauntlet_dr, gauntlet_h: gameStats.gauntlet_h, gauntlet_k: gameStats.gauntlet_k, gauntlet_p: gameStats.gauntlet_p, gauntlet_s: gameStats.gauntlet_s, gauntlet_t: gameStats.gauntlet_t, rocket_p: gameStats.rocket_p, rocket_k: gameStats.rocket_k, rocket_d: gameStats.rocket_d, rocket_s: gameStats.rocket_s, rocket_h: gameStats.rocket_h, rocket_t: gameStats.rocket_t, rocket_dg: gameStats.rocket_dg, rocket_dr: gameStats.rocket_dr, lightning_p: gameStats.lightning_p, lightning_k: gameStats.lightning_k, lightning_d: gameStats.lightning_d, lightning_s: gameStats.lightning_s, lightning_h: gameStats.lightning_h, lightning_t: gameStats.lightning_t, lightning_dg: gameStats.lightning_dg, lightning_dr: gameStats.lightning_dr, railgun_p: gameStats.railgun_p, railgun_k: gameStats.railgun_k, railgun_d: gameStats.railgun_d, railgun_s: gameStats.railgun_s, railgun_h: gameStats.railgun_h, railgun_t: gameStats.railgun_t, railgun_dg: gameStats.railgun_dg, railgun_dr: gameStats.railgun_dr, plasma_p: gameStats.plasma_p, plasma_k: gameStats.plasma_k, plasma_d: gameStats.plasma_d, plasma_s: gameStats.plasma_s, plasma_h: gameStats.plasma_h, plasma_t: gameStats.plasma_t, plasma_dg: gameStats.plasma_dg, plasma_dr: gameStats.plasma_dr, grenade_p: gameStats.grenade_p, grenade_k: gameStats.grenade_k, grenade_d: gameStats.grenade_d, grenade_s: gameStats.grenade_s, grenade_h: gameStats.grenade_h, grenade_t: gameStats.grenade_t, grenade_dg: gameStats.grenade_dg, grenade_dr: gameStats.grenade_dr, bfg_p: gameStats.bfg_p, bfg_k: gameStats.bfg_k, bfg_d: gameStats.bfg_d, bfg_s: gameStats.bfg_s, bfg_h: gameStats.bfg_h, bfg_t: gameStats.bfg_t, bfg_dg: gameStats.bfg_dg, bfg_dr: gameStats.bfg_dr, hmg_p: gameStats.hmg_p, hmg_k: gameStats.hmg_k, hmg_d: gameStats.hmg_d, hmg_s: gameStats.hmg_s, hmg_h: gameStats.hmg_h, hmg_t: gameStats.hmg_t, hmg_dg: gameStats.hmg_dg, hmg_dr: gameStats.hmg_dr, chaingun_p: gameStats.chaingun_p, chaingun_k: gameStats.chaingun_k, chaingun_d: gameStats.chaingun_d, chaingun_s: gameStats.chaingun_s, chaingun_h: gameStats.chaingun_h, chaingun_t: gameStats.chaingun_t, chaingun_dg: gameStats.chaingun_dg, chaingun_dr: gameStats.chaingun_dr, nailgun_p: gameStats.nailgun_p, nailgun_k: gameStats.nailgun_k, nailgun_d: gameStats.nailgun_d, nailgun_s: gameStats.nailgun_s, nailgun_h: gameStats.nailgun_h, nailgun_t: gameStats.nailgun_t, nailgun_dg: gameStats.nailgun_dg, nailgun_dr: gameStats.nailgun_dr, proximitymine_p: gameStats.proximitymine_p, proximitymine_k: gameStats.proximitymine_k, proximitymine_d: gameStats.proximitymine_d, proximitymine_s: gameStats.proximitymine_s, proximitymine_h: gameStats.proximitymine_h, proximitymine_t: gameStats.proximitymine_t, proximitymine_dg: gameStats.proximitymine_dg, proximitymine_dr: gameStats.proximitymine_dr, shotgun_p: gameStats.shotgun_p, shotgun_k: gameStats.shotgun_k, shotgun_d: gameStats.shotgun_d, shotgun_s: gameStats.shotgun_s, shotgun_h: gameStats.shotgun_h, shotgun_t: gameStats.shotgun_t, shotgun_dg: gameStats.shotgun_dg, shotgun_dr: gameStats.shotgun_dr, other_p: gameStats.other_p, other_k: gameStats.other_k, other_d: gameStats.other_d, other_s: gameStats.other_s, other_h: gameStats.other_h, other_t: gameStats.other_t, other_dg: gameStats.other_dg, other_dr: gameStats.other_dr } }; return this.update(incrementQuery); }; GameStats = db.model('GameStats', gameStatsSchema); return GameStats; };