Skip to content

Commit

Permalink
Refactor building upgrade requirements procedure (#9)
Browse files Browse the repository at this point in the history
Refactor building requirements procedure to include target level validation and upgrade prerequisites
  • Loading branch information
Vianpyro authored Nov 29, 2024
1 parent d262dd2 commit c72bb24
Showing 1 changed file with 32 additions and 10 deletions.
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 ;

0 comments on commit c72bb24

Please sign in to comment.