feat(politics): add new political office benefits and enhance database migration
All checks were successful
Deploy to production / deploy (push) Successful in 2m54s
All checks were successful
Deploy to production / deploy (push) Successful in 2m54s
- Introduced new benefits including 'reputation_periodic', 'appoint_politicians', 'set_regional_tax', 'free_lover_slots', 'guard_protection', and 'court_immunity' to the political office system. - Updated database migration to add and remove the 'last_political_daily_salary_on' column using SQL queries for better performance. - Enhanced localization files for multiple languages to support new benefits, improving user experience across the application. - Updated UI components to display new benefits correctly in the PoliticsView, ensuring accurate representation of political office functionalities.
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
-- Spalte für tägliches Politik-Gehalt (Sequelize: FalukantUser.lastPoliticalDailySalaryOn).
|
||||
-- Entspricht Migration: backend/migrations/20260401120000-politics-benefits-and-daily-salary.cjs
|
||||
--
|
||||
-- Bevorzugt: Migration per CLI ausführen (führt auch die political_office_benefit-Anpassung aus).
|
||||
-- Nur diese Spalte ohne CLI: dieses Skript einmal ausführen; die Migration nutzt ADD COLUMN IF NOT EXISTS
|
||||
-- und kann danach trotzdem noch sauber durchlaufen.
|
||||
|
||||
ALTER TABLE falukant_data.falukant_user
|
||||
ADD COLUMN IF NOT EXISTS last_political_daily_salary_on date NULL;
|
||||
108
backend/sql/falukant_political_office_extra_benefits.sql
Normal file
108
backend/sql/falukant_political_office_extra_benefits.sql
Normal file
@@ -0,0 +1,108 @@
|
||||
-- =============================================================================
|
||||
-- Zusätzliche politische Amtsvorteile (reputation_periodic, Ernennungen, Steuerkompetenz, …)
|
||||
-- =============================================================================
|
||||
-- Voraussetzung: falukant_political_office_benefits.sql (oder gleichwertiges Schema) ist angelegt.
|
||||
-- Idempotent: mehrfach ausführbar.
|
||||
--
|
||||
-- Hinweis: Frische Dev-DBs bekommen dieselben Zeilen über initializePoliticalOfficeBenefits (Node).
|
||||
|
||||
INSERT INTO falukant_type.political_office_benefit_type (tr)
|
||||
SELECT 'reputation_periodic' WHERE NOT EXISTS (SELECT 1 FROM falukant_type.political_office_benefit_type t WHERE t.tr = 'reputation_periodic');
|
||||
INSERT INTO falukant_type.political_office_benefit_type (tr)
|
||||
SELECT 'appoint_politicians' WHERE NOT EXISTS (SELECT 1 FROM falukant_type.political_office_benefit_type t WHERE t.tr = 'appoint_politicians');
|
||||
INSERT INTO falukant_type.political_office_benefit_type (tr)
|
||||
SELECT 'set_regional_tax' WHERE NOT EXISTS (SELECT 1 FROM falukant_type.political_office_benefit_type t WHERE t.tr = 'set_regional_tax');
|
||||
INSERT INTO falukant_type.political_office_benefit_type (tr)
|
||||
SELECT 'free_lover_slots' WHERE NOT EXISTS (SELECT 1 FROM falukant_type.political_office_benefit_type t WHERE t.tr = 'free_lover_slots');
|
||||
INSERT INTO falukant_type.political_office_benefit_type (tr)
|
||||
SELECT 'guard_protection' WHERE NOT EXISTS (SELECT 1 FROM falukant_type.political_office_benefit_type t WHERE t.tr = 'guard_protection');
|
||||
INSERT INTO falukant_type.political_office_benefit_type (tr)
|
||||
SELECT 'court_immunity' WHERE NOT EXISTS (SELECT 1 FROM falukant_type.political_office_benefit_type t WHERE t.tr = 'court_immunity');
|
||||
|
||||
-- reputation_periodic
|
||||
INSERT INTO falukant_predefine.political_office_benefit (office_type_id, benefit_type_id, value)
|
||||
SELECT ot.id, bt.id, v::jsonb FROM falukant_type.political_office_type ot
|
||||
JOIN falukant_type.political_office_benefit_type bt ON bt.tr = 'reputation_periodic'
|
||||
CROSS JOIN (VALUES
|
||||
('assessor', '{"intervalDays":28,"gain":1}'::text),
|
||||
('master-builder', '{"intervalDays":21,"gain":1}'::text),
|
||||
('village-major', '{"intervalDays":21,"gain":1}'::text),
|
||||
('councillor', '{"intervalDays":28,"gain":1}'::text),
|
||||
('council', '{"intervalDays":21,"gain":1}'::text),
|
||||
('mayor', '{"intervalDays":14,"gain":2}'::text),
|
||||
('town-clerk', '{"intervalDays":21,"gain":1}'::text),
|
||||
('judge', '{"intervalDays":14,"gain":2}'::text),
|
||||
('bailif', '{"intervalDays":21,"gain":1}'::text),
|
||||
('sheriff', '{"intervalDays":14,"gain":2}'::text),
|
||||
('taxman', '{"intervalDays":21,"gain":2}'::text),
|
||||
('treasurer', '{"intervalDays":14,"gain":3}'::text),
|
||||
('consultant', '{"intervalDays":21,"gain":2}'::text),
|
||||
('hangman', '{"intervalDays":21,"gain":1}'::text),
|
||||
('territorial-council', '{"intervalDays":14,"gain":2}'::text),
|
||||
('territorial-council-speaker', '{"intervalDays":10,"gain":3}'::text),
|
||||
('ruler-consultant', '{"intervalDays":10,"gain":3}'::text),
|
||||
('state-administrator', '{"intervalDays":10,"gain":3}'::text),
|
||||
('super-state-administrator', '{"intervalDays":7,"gain":4}'::text),
|
||||
('governor', '{"intervalDays":7,"gain":4}'::text),
|
||||
('minister', '{"intervalDays":10,"gain":3}'::text),
|
||||
('ministry-helper', '{"intervalDays":14,"gain":2}'::text),
|
||||
('chancellor', '{"intervalDays":7,"gain":5}'::text)
|
||||
) AS s(office_name, v)
|
||||
WHERE ot.name = s.office_name
|
||||
AND NOT EXISTS (SELECT 1 FROM falukant_predefine.political_office_benefit x WHERE x.office_type_id = ot.id AND x.benefit_type_id = bt.id);
|
||||
|
||||
-- appoint_politicians
|
||||
INSERT INTO falukant_predefine.political_office_benefit (office_type_id, benefit_type_id, value)
|
||||
SELECT ot.id, bt.id, v::jsonb FROM falukant_type.political_office_type ot
|
||||
JOIN falukant_type.political_office_benefit_type bt ON bt.tr = 'appoint_politicians'
|
||||
CROSS JOIN (VALUES
|
||||
('mayor', '{"officeTrs":["beadle","town-clerk"]}'::text),
|
||||
('judge', '{"officeTrs":["bailif"]}'::text),
|
||||
('governor', '{"officeTrs":["state-administrator","consultant"]}'::text),
|
||||
('super-state-administrator', '{"officeTrs":["territorial-council","hangman"]}'::text),
|
||||
('chancellor', '{"officeTrs":["minister","ministry-helper","super-state-administrator"]}'::text)
|
||||
) AS s(office_name, v)
|
||||
WHERE ot.name = s.office_name
|
||||
AND NOT EXISTS (SELECT 1 FROM falukant_predefine.political_office_benefit x WHERE x.office_type_id = ot.id AND x.benefit_type_id = bt.id);
|
||||
|
||||
-- set_regional_tax
|
||||
INSERT INTO falukant_predefine.political_office_benefit (office_type_id, benefit_type_id, value)
|
||||
SELECT ot.id, bt.id, v::jsonb FROM falukant_type.political_office_type ot
|
||||
JOIN falukant_type.political_office_benefit_type bt ON bt.tr = 'set_regional_tax'
|
||||
CROSS JOIN (VALUES
|
||||
('taxman', '{"scope":"local"}'::text),
|
||||
('treasurer', '{"scope":"shire"}'::text),
|
||||
('super-state-administrator', '{"scope":"duchy"}'::text),
|
||||
('chancellor', '{"scope":"national"}'::text)
|
||||
) AS s(office_name, v)
|
||||
WHERE ot.name = s.office_name
|
||||
AND NOT EXISTS (SELECT 1 FROM falukant_predefine.political_office_benefit x WHERE x.office_type_id = ot.id AND x.benefit_type_id = bt.id);
|
||||
|
||||
-- free_lover_slots
|
||||
INSERT INTO falukant_predefine.political_office_benefit (office_type_id, benefit_type_id, value)
|
||||
SELECT ot.id, bt.id, v::jsonb FROM falukant_type.political_office_type ot
|
||||
JOIN falukant_type.political_office_benefit_type bt ON bt.tr = 'free_lover_slots'
|
||||
CROSS JOIN (VALUES
|
||||
('councillor', '{"count":1}'::text),
|
||||
('mayor', '{"count":1}'::text),
|
||||
('minister', '{"count":1}'::text),
|
||||
('governor', '{"count":2}'::text),
|
||||
('chancellor', '{"count":3}'::text)
|
||||
) AS s(office_name, v)
|
||||
WHERE ot.name = s.office_name
|
||||
AND NOT EXISTS (SELECT 1 FROM falukant_predefine.political_office_benefit x WHERE x.office_type_id = ot.id AND x.benefit_type_id = bt.id);
|
||||
|
||||
-- guard_protection / court_immunity
|
||||
INSERT INTO falukant_predefine.political_office_benefit (office_type_id, benefit_type_id, value)
|
||||
SELECT ot.id, bt.id, '{}'::jsonb FROM falukant_type.political_office_type ot
|
||||
JOIN falukant_type.political_office_benefit_type bt ON bt.tr = 'guard_protection'
|
||||
CROSS JOIN (VALUES ('sheriff'), ('hangman'), ('minister')) AS s(office_name)
|
||||
WHERE ot.name = s.office_name
|
||||
AND NOT EXISTS (SELECT 1 FROM falukant_predefine.political_office_benefit x WHERE x.office_type_id = ot.id AND x.benefit_type_id = bt.id);
|
||||
|
||||
INSERT INTO falukant_predefine.political_office_benefit (office_type_id, benefit_type_id, value)
|
||||
SELECT ot.id, bt.id, '{}'::jsonb FROM falukant_type.political_office_type ot
|
||||
JOIN falukant_type.political_office_benefit_type bt ON bt.tr = 'court_immunity'
|
||||
CROSS JOIN (VALUES ('judge'), ('councillor'), ('chancellor')) AS s(office_name)
|
||||
WHERE ot.name = s.office_name
|
||||
AND NOT EXISTS (SELECT 1 FROM falukant_predefine.political_office_benefit x WHERE x.office_type_id = ot.id AND x.benefit_type_id = bt.id);
|
||||
Reference in New Issue
Block a user