{"nodes": [{"id": "$graphify-root$_backend_app_main_py", "label": "main.py", "file_type": "code", "source_file": "backend/app/main.py", "source_location": "L1"}, {"id": "$graphify-root$_backend_app_main_rate_limit_handler", "label": "rate_limit_handler()", "file_type": "code", "source_file": "backend/app/main.py", "source_location": "L16", "_callable": true}, {"id": "request", "label": "Request", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/backend/app/main.py"}, {"id": "ratelimitexceeded", "label": "RateLimitExceeded", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/backend/app/main.py"}, {"id": "get", "label": "get", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/backend/app/main.py"}, {"id": "limit", "label": "limit", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/backend/app/main.py"}, {"id": "$graphify-root$_backend_app_main_health", "label": "health()", "file_type": "code", "source_file": "backend/app/main.py", "source_location": "L66", "_callable": true}, {"id": "$graphify-root$_backend_app_main_ready", "label": "ready()", "file_type": "code", "source_file": "backend/app/main.py", "source_location": "L72", "_callable": true}, {"id": "$graphify-root$_backend_app_main_rationale_17", "label": "Log rate limit hit (brute-force indicator), lalu delegate ke handler default.", "file_type": "rationale", "source_file": "backend/app/main.py", "source_location": "L17"}], "edges": [{"source": "$graphify-root$_backend_app_main_py", "target": "fastapi", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "backend/app/main.py", "source_location": "L1", "weight": 1.0, "_python_import_module": "fastapi", "_python_import_bindings": [["FastAPI", "FastAPI"], ["Request", "Request"]]}, {"source": "$graphify-root$_backend_app_main_py", "target": "fastapi_middleware_cors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "backend/app/main.py", "source_location": "L2", "weight": 1.0, "_python_import_module": "fastapi.middleware.cors", "_python_import_bindings": [["CORSMiddleware", "CORSMiddleware"]]}, {"source": "$graphify-root$_backend_app_main_py", "target": "slowapi", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "backend/app/main.py", "source_location": "L3", "weight": 1.0, "_python_import_module": "slowapi", "_python_import_bindings": [["_rate_limit_exceeded_handler", "_rate_limit_exceeded_handler"]]}, {"source": "$graphify-root$_backend_app_main_py", "target": "slowapi_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "backend/app/main.py", "source_location": "L4", "weight": 1.0, "_python_import_module": "slowapi.errors", "_python_import_bindings": [["RateLimitExceeded", "RateLimitExceeded"]]}, {"source": "$graphify-root$_backend_app_main_py", "target": "slowapi_middleware", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "backend/app/main.py", "source_location": "L5", "weight": 1.0, "_python_import_module": "slowapi.middleware", "_python_import_bindings": [["SlowAPIMiddleware", "SlowAPIMiddleware"]]}, {"source": "$graphify-root$_backend_app_main_py", "target": "$graphify-root$_backend_app_core_config_py", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "backend/app/main.py", "source_location": "L6", "weight": 1.0, "_python_import_module": "app.core.config", "_python_import_bindings": [["settings", "settings"], ["configure_logging", "configure_logging"]], "target_file": "$graphify-root$/backend/app/core/config.py"}, {"source": "$graphify-root$_backend_app_main_py", "target": "$graphify-root$_backend_app_core_rate_limit_py", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "backend/app/main.py", "source_location": "L7", "weight": 1.0, "_python_import_module": "app.core.rate_limit", "_python_import_bindings": [["limiter", "limiter"], ["get_rate_limit_string", "get_rate_limit_string"]], "target_file": "$graphify-root$/backend/app/core/rate_limit.py"}, {"source": "$graphify-root$_backend_app_main_py", "target": "structlog", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "backend/app/main.py", "source_location": "L9", "weight": 1.0, "_python_import_module": "structlog", "_python_import_bindings": [["structlog", "structlog"]], "_python_import_module_binding": true}, {"source": "$graphify-root$_backend_app_main_py", "target": "$graphify-root$_backend_app_main_rate_limit_handler", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/main.py", "source_location": "L16", "weight": 1.0}, {"source": "$graphify-root$_backend_app_main_rate_limit_handler", "target": "request", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "backend/app/main.py", "source_location": "L16", "weight": 1.0}, {"source": "$graphify-root$_backend_app_main_rate_limit_handler", "target": "ratelimitexceeded", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "backend/app/main.py", "source_location": "L16", "weight": 1.0}, {"source": "$graphify-root$_backend_app_main_health", "target": "get", "relation": "references", "confidence": "EXTRACTED", "source_file": "backend/app/main.py", "source_location": "L64", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_backend_app_main_health", "target": "limit", "relation": "references", "confidence": "EXTRACTED", "source_file": "backend/app/main.py", "source_location": "L65", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_backend_app_main_py", "target": "$graphify-root$_backend_app_main_health", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/main.py", "source_location": "L66", "weight": 1.0}, {"source": "$graphify-root$_backend_app_main_health", "target": "request", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "backend/app/main.py", "source_location": "L66", "weight": 1.0}, {"source": "$graphify-root$_backend_app_main_ready", "target": "get", "relation": "references", "confidence": "EXTRACTED", "source_file": "backend/app/main.py", "source_location": "L70", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_backend_app_main_ready", "target": "limit", "relation": "references", "confidence": "EXTRACTED", "source_file": "backend/app/main.py", "source_location": "L71", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_backend_app_main_py", "target": "$graphify-root$_backend_app_main_ready", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/main.py", "source_location": "L72", "weight": 1.0}, {"source": "$graphify-root$_backend_app_main_ready", "target": "request", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "backend/app/main.py", "source_location": "L72", "weight": 1.0}, {"source": "$graphify-root$_backend_app_main_rationale_17", "target": "$graphify-root$_backend_app_main_rate_limit_handler", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/main.py", "source_location": "L17", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_backend_app_main_rate_limit_handler", "callee": "warning", "is_member_call": true, "source_file": "backend/app/main.py", "source_location": "L19", "receiver": "logger", "_python_receiver_shadowed": true}, {"caller_nid": "$graphify-root$_backend_app_main_rate_limit_handler", "callee": "_rate_limit_exceeded_handler", "is_member_call": false, "source_file": "backend/app/main.py", "source_location": "L25", "receiver": null}, {"caller_nid": "$graphify-root$_backend_app_main_py", "callee": "limiter", "is_member_call": false, "indirect": true, "context": "assignment", "source_file": "backend/app/main.py", "source_location": "L34"}], "_cached_target_files": ["$graphify-root$/backend/app/core/config.py", "$graphify-root$/backend/app/core/rate_limit.py"]}