- Introduced new endpoints for retrieving and executing reputation actions in FalukantController and falukantRouter. - Implemented service methods in FalukantService to handle reputation actions, including daily limits and action execution logic. - Updated the frontend ReputationView component to display available actions and their details, including cost and potential reputation gain. - Added translations for reputation actions in both German and English locales. - Enhanced initialization logic to set up reputation action types in the database.
48 lines
1.9 KiB
JavaScript
48 lines
1.9 KiB
JavaScript
/* eslint-disable */
|
|
module.exports = {
|
|
async up(queryInterface, Sequelize) {
|
|
// Typ-Tabelle (konfigurierbar ohne Code): falukant_type.reputation_action
|
|
await queryInterface.sequelize.query(`
|
|
CREATE TABLE IF NOT EXISTS falukant_type.reputation_action (
|
|
id serial PRIMARY KEY,
|
|
tr text NOT NULL UNIQUE,
|
|
cost integer NOT NULL CHECK (cost >= 0),
|
|
base_gain integer NOT NULL CHECK (base_gain >= 0),
|
|
decay_factor double precision NOT NULL CHECK (decay_factor > 0 AND decay_factor <= 1),
|
|
min_gain integer NOT NULL DEFAULT 0 CHECK (min_gain >= 0),
|
|
decay_window_days integer NOT NULL DEFAULT 7 CHECK (decay_window_days >= 1 AND decay_window_days <= 365)
|
|
);
|
|
`);
|
|
|
|
// Log-Tabelle: falukant_log.reputation_action
|
|
await queryInterface.sequelize.query(`
|
|
CREATE TABLE IF NOT EXISTS falukant_log.reputation_action (
|
|
id serial PRIMARY KEY,
|
|
falukant_user_id integer NOT NULL,
|
|
action_type_id integer NOT NULL,
|
|
cost integer NOT NULL CHECK (cost >= 0),
|
|
base_gain integer NOT NULL CHECK (base_gain >= 0),
|
|
gain integer NOT NULL CHECK (gain >= 0),
|
|
times_used_before integer NOT NULL CHECK (times_used_before >= 0),
|
|
action_timestamp timestamp with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
`);
|
|
|
|
await queryInterface.sequelize.query(`
|
|
CREATE INDEX IF NOT EXISTS reputation_action_log_user_type_idx
|
|
ON falukant_log.reputation_action (falukant_user_id, action_type_id);
|
|
`);
|
|
await queryInterface.sequelize.query(`
|
|
CREATE INDEX IF NOT EXISTS reputation_action_log_ts_idx
|
|
ON falukant_log.reputation_action (action_timestamp);
|
|
`);
|
|
},
|
|
|
|
async down(queryInterface, Sequelize) {
|
|
await queryInterface.sequelize.query(`DROP TABLE IF EXISTS falukant_log.reputation_action;`);
|
|
await queryInterface.sequelize.query(`DROP TABLE IF EXISTS falukant_type.reputation_action;`);
|
|
},
|
|
};
|
|
|
|
|