From ca3b145a0cab5a98ff2f64123bfa30fd48347f77 Mon Sep 17 00:00:00 2001 From: KittenTM Date: Wed, 4 Mar 2026 01:36:07 +0100 Subject: [PATCH] (untested) seperate db saving to allow for hopefully equipment screen to work. api not implemented currently. --- judd/database.js | 25 +++++++++---------------- judd/models/equipment.js | 20 ++++++++++++++++++++ judd/models/equipmentLast.js | 34 ++++++++++++++++++++++++++++++++++ judd/server.js | 3 +++ judd/titles/splatoon.js | 35 ++++++++++++++++++++++++++++++++++- 5 files changed, 100 insertions(+), 17 deletions(-) create mode 100644 judd/models/equipment.js create mode 100644 judd/models/equipmentLast.js diff --git a/judd/database.js b/judd/database.js index 9474ca2..809117f 100644 --- a/judd/database.js +++ b/judd/database.js @@ -1,31 +1,24 @@ const { Sequelize } = require('sequelize'); -const connection_string = process.env.DB_URL; -const options = { +const sequelize = new Sequelize(process.env.DB_URL, { dialect: 'postgres', logging: false, pool: { max: 5, min: 0, acquire: 30000, idle: 10000 } -}; - -const sequelize = new Sequelize(connection_string, options); - -module.exports = { - connection: sequelize, - connect -}; - -require('./models/result'); -require('./models/splatfest_result'); +}); async function connect() { try { await sequelize.authenticate(); console.log('PostgreSQL connected.'); - - await sequelize.sync(); + await sequelize.sync({ force: true }); console.log('PostgreSQL synchronized'); } catch (error) { console.error('PostgreSQL connection error:', error); process.exit(1); } -} \ No newline at end of file +} + +module.exports = { + connection: sequelize, + connect +}; \ No newline at end of file diff --git a/judd/models/equipment.js b/judd/models/equipment.js new file mode 100644 index 0000000..4c0133c --- /dev/null +++ b/judd/models/equipment.js @@ -0,0 +1,20 @@ +const { DataTypes } = require('sequelize'); +const { connection } = require('../database'); + +const Equipment = connection.define('Equipment', { + PId: { + type: DataTypes.BIGINT, + allowNull: false + }, + weapon: { + type: DataTypes.INTEGER + }, + sumpaint: { + type: DataTypes.INTEGER + } +}, { + tableName: 'equipment', + timestamps: true +}); + +module.exports = { Equipment }; \ No newline at end of file diff --git a/judd/models/equipmentLast.js b/judd/models/equipmentLast.js new file mode 100644 index 0000000..3dda464 --- /dev/null +++ b/judd/models/equipmentLast.js @@ -0,0 +1,34 @@ +const { DataTypes } = require('sequelize'); +const { connection } = require('../database'); + +const EquipmentLast = connection.define('EquipmentLast', { + PId: { + type: DataTypes.BIGINT, + allowNull: false, + unique: true + }, + weapon: { type: DataTypes.INTEGER }, + // shoes + Gear_Shoes: { type: DataTypes.INTEGER }, + Gear_Shoes_Skill0: { type: DataTypes.INTEGER }, + Gear_Shoes_Skill1: { type: DataTypes.INTEGER }, + Gear_Shoes_Skill2: { type: DataTypes.INTEGER }, + // clothes + Gear_Clothes: { type: DataTypes.INTEGER }, + Gear_Clothes_Skill0: { type: DataTypes.INTEGER }, + Gear_Clothes_Skill1: { type: DataTypes.INTEGER }, + Gear_Clothes_Skill2: { type: DataTypes.INTEGER }, + // hat + Gear_Head: { type: DataTypes.INTEGER }, + Gear_Head_Skill0: { type: DataTypes.INTEGER }, + Gear_Head_Skill1: { type: DataTypes.INTEGER }, + Gear_Head_Skill2: { type: DataTypes.INTEGER }, + // levels + Rank: { type: DataTypes.INTEGER }, + Udemae: { type: DataTypes.INTEGER } +}, { + tableName: 'equipment_last', + timestamps: true +}); + +module.exports = { EquipmentLast }; \ No newline at end of file diff --git a/judd/server.js b/judd/server.js index 671763e..83bdc17 100644 --- a/judd/server.js +++ b/judd/server.js @@ -8,6 +8,9 @@ const validateBOSSDigestMiddleware = require('./middleware/validate-boss-digest' const copyRequestStreamMiddleware = require('./middleware/copy-request-stream'); const validateMultipartMiddleware = require('./middleware/validate-multipart'); const database = require('./database'); +require('./models/splatfest_result'); +require('./models/equipment'); +require('./models/equipmentLast'); const app = express(); app.set('trust proxy', true); diff --git a/judd/titles/splatoon.js b/judd/titles/splatoon.js index 3ae06e5..13f0f4e 100644 --- a/judd/titles/splatoon.js +++ b/judd/titles/splatoon.js @@ -1,10 +1,43 @@ const multer = require('multer'); const { joi } = require('../util'); const { SplatfestResult } = require('../models/splatfest_result'); +const { Equipment } = require('../models/equipment'); +const { EquipmentLast } = require('../models/equipmentLast'); module.exports = { type: 'telemetry', - result_model: SplatfestResult, + result_model: { + create: async (data) => { + const result = await SplatfestResult.create(data); + + await Equipment.create({ + PId: data.PId, + weapon: data.Weapon, + sumpaint: data.SumPaint + }); + + await EquipmentLast.upsert({ + PId: data.PId, + weapon: data.Weapon, + Gear_Shoes: data.Gear_Shoes, + Gear_Shoes_Skill0: data.Gear_Shoes_Skill0, + Gear_Shoes_Skill1: data.Gear_Shoes_Skill1, + Gear_Shoes_Skill2: data.Gear_Shoes_Skill2, + Gear_Clothes: data.Gear_Clothes, + Gear_Clothes_Skill0: data.Gear_Clothes_Skill0, + Gear_Clothes_Skill1: data.Gear_Clothes_Skill1, + Gear_Clothes_Skill2: data.Gear_Clothes_Skill2, + Gear_Head: data.Gear_Head, + Gear_Head_Skill0: data.Gear_Head_Skill0, + Gear_Head_Skill1: data.Gear_Head_Skill1, + Gear_Head_Skill2: data.Gear_Head_Skill2, + Rank: data.Rank, + Udemae: data.Udemae + }); + + return result; + } + }, validation_schema: joi.object({ ServerEnv: joi.string(), PId: joi.numberstring(),