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.
109 lines
6.6 KiB
SQL
109 lines
6.6 KiB
SQL
-- =============================================================================
|
|
-- 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);
|