38201-vm/backend/src/db/models/level_runs.js
2026-02-05 02:29:20 +00:00

227 lines
2.8 KiB
JavaScript

const config = require('../../config');
const providers = config.providers;
const crypto = require('crypto');
const bcrypt = require('bcrypt');
const moment = require('moment');
module.exports = function(sequelize, DataTypes) {
const level_runs = sequelize.define(
'level_runs',
{
id: {
type: DataTypes.UUID,
defaultValue: DataTypes.UUIDV4,
primaryKey: true,
},
mode: {
type: DataTypes.ENUM,
values: [
"main",
"endless"
],
},
result: {
type: DataTypes.ENUM,
values: [
"completed",
"failed",
"quit"
],
},
started_at: {
type: DataTypes.DATE,
},
ended_at: {
type: DataTypes.DATE,
},
duration_seconds: {
type: DataTypes.DECIMAL,
},
restarts_count: {
type: DataTypes.INTEGER,
},
hooks_fired_count: {
type: DataTypes.INTEGER,
},
near_miss_count: {
type: DataTypes.INTEGER,
},
combo_max: {
type: DataTypes.INTEGER,
},
best_speed: {
type: DataTypes.DECIMAL,
},
slow_motion_triggered: {
type: DataTypes.BOOLEAN,
allowNull: false,
defaultValue: false,
},
score: {
type: DataTypes.DECIMAL,
},
importHash: {
type: DataTypes.STRING(255),
allowNull: true,
unique: true,
},
},
{
timestamps: true,
paranoid: true,
freezeTableName: true,
},
);
level_runs.associate = (db) => {
/// loop through entities and it's fields, and if ref === current e[name] and create relation has many on parent entity
db.level_runs.hasMany(db.leaderboard_entries, {
as: 'leaderboard_entries_run',
foreignKey: {
name: 'runId',
},
constraints: false,
});
db.level_runs.hasMany(db.game_events, {
as: 'game_events_run',
foreignKey: {
name: 'runId',
},
constraints: false,
});
//end loop
db.level_runs.belongsTo(db.users, {
as: 'user',
foreignKey: {
name: 'userId',
},
constraints: false,
});
db.level_runs.belongsTo(db.levels, {
as: 'level',
foreignKey: {
name: 'levelId',
},
constraints: false,
});
db.level_runs.belongsTo(db.skins, {
as: 'skin',
foreignKey: {
name: 'skinId',
},
constraints: false,
});
db.level_runs.belongsTo(db.users, {
as: 'createdBy',
});
db.level_runs.belongsTo(db.users, {
as: 'updatedBy',
});
};
return level_runs;
};