Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor building upgrade requirements procedure #9

Merged
merged 3 commits into from
Nov 29, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 32 additions & 10 deletions procedures/get/building.sql
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,41 @@ BEGIN
WHERE building_id = p_building_id;
END //

CREATE OR REPLACE PROCEDURE get_building_prerequisites(IN p_building_id INT)
CREATE OR REPLACE PROCEDURE get_building_upgrade_requirements(
IN p_building_id INT,
IN target_level INT
)
BEGIN
SELECT prerequisite_id
FROM building_prerequisite
WHERE building_id = p_building_id;
END //
-- Check if the building level is valid
DECLARE max_building_level INT;

-- This procedure is used to get the requirements for a building
CREATE OR REPLACE PROCEDURE get_building_requirements(IN p_building_id INT)
BEGIN
SELECT required_wood, required_stone, required_silver, required_population
FROM building_requirement
SELECT max_level INTO max_building_level
FROM building
WHERE building_id = p_building_id;

IF target_level > max_building_level THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Target level exceeds maximum building level.';
END IF;

-- Fetch required resources
SELECT
br.required_wood,
br.required_stone,
br.required_silver,
br.required_population
FROM building_requirement br
WHERE br.building_id = p_building_id AND br.building_level = target_level;

-- Fetch prerequisite buildings
SELECT
bp.prerequisite_building_id,
b.building_name AS prerequisite_building_name,
bp.building_level AS required_level
FROM building_prerequisite bp
JOIN building b ON bp.prerequisite_building_id = b.building_id
WHERE bp.building_id = p_building_id AND bp.building_level = target_level;

END //

DELIMITER ;