""" Abilities API Blueprint This module provides API endpoints for fetching ability information: - List all available abilities - Get details for a specific ability """ from flask import Blueprint from app.models.abilities import AbilityLoader from app.utils.response import ( success_response, not_found_response, ) from app.utils.logging import get_logger # Initialize logger logger = get_logger(__file__) # Create blueprint abilities_bp = Blueprint('abilities', __name__, url_prefix='/api/v1/abilities') # Initialize ability loader (singleton pattern) _ability_loader = None def get_ability_loader() -> AbilityLoader: """ Get the singleton AbilityLoader instance. Returns: AbilityLoader: The ability loader instance """ global _ability_loader if _ability_loader is None: _ability_loader = AbilityLoader() return _ability_loader # ============================================================================= # Ability Endpoints # ============================================================================= @abilities_bp.route('', methods=['GET']) def list_abilities(): """ List all available abilities. Returns all abilities defined in the system with their full details. Returns: { "abilities": [ { "ability_id": "smite", "name": "Smite", "description": "Call down holy light...", "ability_type": "spell", "base_power": 20, "damage_type": "holy", "mana_cost": 10, "cooldown": 0, ... }, ... ], "count": 5 } """ logger.info("Listing all abilities") loader = get_ability_loader() abilities = loader.load_all_abilities() # Convert to list of dicts for JSON serialization abilities_list = [ability.to_dict() for ability in abilities.values()] logger.info("Abilities listed", count=len(abilities_list)) return success_response({ "abilities": abilities_list, "count": len(abilities_list) }) @abilities_bp.route('/', methods=['GET']) def get_ability(ability_id: str): """ Get details for a specific ability. Args: ability_id: The unique identifier for the ability (e.g., "smite") Returns: { "ability_id": "smite", "name": "Smite", "description": "Call down holy light to smite your enemies", "ability_type": "spell", "base_power": 20, "damage_type": "holy", "scaling_stat": "wisdom", "scaling_factor": 0.5, "mana_cost": 10, "cooldown": 0, "effects_applied": [], "is_aoe": false, "target_count": 1 } Errors: 404: Ability not found """ logger.info("Getting ability", ability_id=ability_id) loader = get_ability_loader() ability = loader.load_ability(ability_id) if ability is None: logger.warning("Ability not found", ability_id=ability_id) return not_found_response( message=f"Ability '{ability_id}' not found" ) logger.info("Ability retrieved", ability_id=ability_id, name=ability.name) return success_response(ability.to_dict())