diff --git a/backend/migrations/20251126120000-add-last-nobility-advance-to-falukant-user.cjs b/backend/migrations/20251126120000-add-last-nobility-advance-to-falukant-user.cjs new file mode 100644 index 0000000..7182edb --- /dev/null +++ b/backend/migrations/20251126120000-add-last-nobility-advance-to-falukant-user.cjs @@ -0,0 +1,29 @@ +'use strict'; + +module.exports = { + up: async (queryInterface, Sequelize) => { + await queryInterface.addColumn( + { + tableName: 'falukant_user', + schema: 'falukant_data' + }, + 'last_nobility_advance_at', + { + type: Sequelize.DATE, + allowNull: true + } + ); + }, + + down: async (queryInterface, Sequelize) => { + await queryInterface.removeColumn( + { + tableName: 'falukant_user', + schema: 'falukant_data' + }, + 'last_nobility_advance_at' + ); + } +}; + + diff --git a/backend/models/falukant/data/user.js b/backend/models/falukant/data/user.js index 5c16dc3..41460d9 100644 --- a/backend/models/falukant/data/user.js +++ b/backend/models/falukant/data/user.js @@ -44,6 +44,10 @@ FalukantUser.init({ key: 'id', schema: 'falukant_data' } + }, + lastNobilityAdvanceAt: { + type: DataTypes.DATE, + allowNull: true } }, { sequelize, diff --git a/backend/services/falukantService.js b/backend/services/falukantService.js index f534df8..45e7b55 100644 --- a/backend/services/falukantService.js +++ b/backend/services/falukantService.js @@ -2931,8 +2931,16 @@ class FalukantService extends BaseService { if (!nobility || !nobility.next) { throw new Error('User does not have a nobility'); } - const nextTitle = nobility.next.toJSON(); const user = await this.getFalukantUserByHashedId(hashedUserId); + const now = new Date(); + if (user.lastNobilityAdvanceAt) { + const oneWeekAgo = new Date(now.getTime()); + oneWeekAgo.setDate(oneWeekAgo.getDate() - 7); + if (user.lastNobilityAdvanceAt > oneWeekAgo) { + throw new Error('too soon'); + } + } + const nextTitle = nobility.next.toJSON(); let fulfilled = true; let cost = 0; for (const requirement of nextTitle.requirements) { @@ -2959,6 +2967,7 @@ class FalukantService extends BaseService { }); const character = await FalukantCharacter.findOne({ where: { userId: user.id } }); await character.update({ titleOfNobility: newTitle.id }); + await user.update({ lastNobilityAdvanceAt: now }); if (cost > 0) { updateFalukantUserMoney(user.id, -cost, 'new nobility title', user.id); }