from fastapi import APIRouter, Depends from typing import Dict, Any from app.services.feature_flag_service import feature_flags from app.schemas.feature_flags import FeatureFlagsResponse, FeatureFlagResponse router = APIRouter() @router.get("/flags", response_model=FeatureFlagsResponse) async def get_all_feature_flags() -> FeatureFlagsResponse: """ Get all feature flags for the frontend This endpoint is public as it only returns feature configuration """ all_flags = feature_flags.get_all_flags() enabled_flags = feature_flags.get_enabled_flags() return FeatureFlagsResponse( flags=all_flags, enabled_flags=enabled_flags ) @router.get("/flags/{flag_name}", response_model=FeatureFlagResponse) async def get_feature_flag(flag_name: str) -> FeatureFlagResponse: """ Get a specific feature flag value """ flag_name_upper = flag_name.upper() enabled = feature_flags.is_enabled(flag_name_upper) value = feature_flags.get_flag_value(flag_name_upper) return FeatureFlagResponse( name=flag_name_upper, enabled=enabled, value=value ) @router.post("/flags/reload") async def reload_feature_flags(): """ Reload feature flags from environment variables This could be protected with admin permissions in production """ feature_flags.reload_flags() return {"message": "Feature flags reloaded successfully"}