Files
yourpart3/backend/sql/falukant_political_office_extra_benefits.sql
Torsten Schulz (local) 5d06d97737
All checks were successful
Deploy to production / deploy (push) Successful in 2m54s
feat(politics): add new political office benefits and enhance database migration
- 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.
2026-04-02 15:27:05 +02:00

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);