diff options
Diffstat (limited to 'model.js')
| -rw-r--r-- | model.js | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/model.js b/model.js new file mode 100644 index 0000000..fa7c517 --- /dev/null +++ b/model.js @@ -0,0 +1,123 @@ +/* jshint esnext:true */ +'use strict'; + +var JsonField = require("sequelize-json"); + +module.exports = (seq, Seq) => { + let Player = seq.define("player", { + id: { type: Seq.STRING, unique: true, primaryKey: true }, + /* attributes */ + name: Seq.STRING, + shardId: Seq.STRING, + /* stats */ + level: Seq.INTEGER, + lifetimeGold: Seq.DECIMAL, + lossStreak: Seq.INTEGER, + played: Seq.INTEGER, + played_ranked: Seq.INTEGER, + winStreak: Seq.INTEGER, + wins: Seq.INTEGER, + xp: Seq.INTEGER + }, { + freezeTableName: true, + underscored: true + }); + let Team = seq.define("team", { + id: { type: Seq.STRING, unique: true, primaryKey: true }, + /* attributes */ + name: Seq.STRING, + shardId: Seq.STRING + /* stats */ + }, { + freezeTableName: true, + underscored: true + }); + let Asset = seq.define("asset", { + id: { type: Seq.STRING, unique: true, primaryKey: true }, + /* attributes */ + URL: Seq.STRING, + contentType: Seq.STRING, + createdAt: Seq.DATE, + description: Seq.TEXT, + filename: Seq.STRING, + name: Seq.STRING + }, { + freezeTableName: true, + underscored: true, + createdAt: false + }); + let Match = seq.define("match", { + id: { type: Seq.STRING, unique: true, primaryKey: true }, + /* attributes */ + createdAt: Seq.DATE, + duration: Seq.INTEGER, + gameMode: Seq.STRING, + patchVersion: Seq.STRING, + shardId: Seq.STRING, + /* stats */ + endGameReason: Seq.STRING, + queue: Seq.STRING + }, { + freezeTableName: true, + underscored: true, + createdAt: false + }); + let Roster = seq.define("roster", { + id: { type: Seq.STRING, unique: true, primaryKey: true }, + /* attributes */ + /* stats */ + acesEarned: Seq.INTEGER, + gold: Seq.INTEGER, + heroKills: Seq.INTEGER, + krakenCaptures: Seq.INTEGER, + side: Seq.STRING, + turretKills: Seq.INTEGER, + turretsRemaining: Seq.INTEGER, + }, { + freezeTableName: true, + underscored: true + }); + let Participant = seq.define("participant", { + id: { type: Seq.STRING, unique: true, primaryKey: true }, + /* attributes */ + actor: Seq.STRING, + /* stats */ + assists: Seq.INTEGER, + crystalMineCaptures: Seq.INTEGER, + deaths: Seq.INTEGER, + farm: Seq.DECIMAL, + firstAfkTime: Seq.INTEGER, + goldMineCaptures: Seq.INTEGER, + itemGrants: JsonField(seq, "Participant", "itemGrants"), + itemSells: JsonField(seq, "Participant", "itemSells"), + itemUses: JsonField(seq, "Participant", "itemUses"), + items: JsonField(seq, "Participant", "items"), + jungleKills: Seq.INTEGER, + karmaLevel: Seq.INTEGER, + kills: Seq.INTEGER, + krakenCaptures: Seq.INTEGER, + level: Seq.INTEGER, + minionKills: Seq.INTEGER, + nonJungleMinionKills: Seq.INTEGER, + skillTier: Seq.INTEGER, + skinKey: Seq.STRING, + turretCaptures: Seq.INTEGER, + wentAfk: Seq.BOOLEAN, + winner: Seq.BOOLEAN, + }, { + freezeTableName: true, + underscored: true + }); + + Match.hasMany(Roster, {as: "Rosters"}); + Match.hasMany(Asset, {as: "Assets"}); + Asset.belongsTo(Match); + Roster.belongsTo(Match); + Roster.hasMany(Participant, {as: "Participants"}); + Roster.hasOne(Team, {as: "Team"}); + Team.belongsTo(Roster); + Participant.belongsTo(Roster); + Participant.belongsTo(Player); + + return {Match, Roster, Team, Participant, Player, Asset}; +}; |
