File size: 2,725 Bytes
ce309a8
7c9c453
ac49ac9
948547c
 
 
 
 
ce309a8
 
948547c
 
ce309a8
948547c
 
 
 
 
 
 
ce309a8
948547c
 
ce309a8
948547c
ce309a8
 
948547c
 
 
 
ce309a8
948547c
 
 
 
 
 
 
ce309a8
948547c
 
ce309a8
948547c
ce309a8
 
948547c
 
 
 
ce309a8
948547c
 
 
 
 
 
ce309a8
948547c
 
 
 
ce309a8
948547c
 
 
 
 
 
 
 
 
 
 
ce309a8
948547c
ce309a8
 
948547c
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
from fastapi import APIRouter, HTTPException, Request, Depends
from config_provider import get_config, ServiceConfig
from service_config import ServiceConfig
import json

router = APIRouter()

@router.get("/list")
def list_apis(config: ServiceConfig = Depends(get_config)):
    return config.apis

@router.post("/add")
async def add_api(request: Request, config: ServiceConfig = Depends(get_config)):
    data = await request.json()
    api_name = data.get("api_name")
    api_data = data.get("api_data")

    if not api_name or not api_data:
        raise HTTPException(status_code=400, detail="api_name and api_data are required")

    if api_name in config.apis:
        raise HTTPException(status_code=400, detail="API with this name already exists")

    config.apis[api_name] = api_data

    with open(config.config_path, "w", encoding="utf-8") as f:
        json.dump(config, f, indent=2)

    return {"message": f"API {api_name} added"}

@router.post("/update")
async def update_api(request: Request, config: ServiceConfig = Depends(get_config)):
    data = await request.json()
    api_name = data.get("api_name")
    api_data = data.get("api_data")

    if not api_name or not api_data:
        raise HTTPException(status_code=400, detail="api_name and api_data are required")

    if api_name not in config.apis:
        raise HTTPException(status_code=404, detail="API not found")

    config.apis[api_name] = api_data

    with open(config.config_path, "w", encoding="utf-8") as f:
        json.dump(config, f, indent=2)

    return {"message": f"API {api_name} updated"}

@router.post("/delete")
async def delete_api(request: Request, config: ServiceConfig = Depends(get_config)):
    data = await request.json()
    api_name = data.get("api_name")

    if not api_name:
        raise HTTPException(status_code=400, detail="api_name is required")

    if api_name not in config.apis:
        raise HTTPException(status_code=404, detail="API not found")

    # Check if API is used in any intent
    used_in = []
    for project_name, project in config.projects.items():
        for version in project.get("versions", []):
            for intent in version.get("intents", []):
                if intent.get("action") == api_name:
                    used_in.append(f"{project_name} β†’ v{version.get('version_number')} β†’ {intent.get('name')}")

    if used_in:
        raise HTTPException(
            status_code=400,
            detail=f"API '{api_name}' is used in intents: {', '.join(used_in)}. Cannot delete."
        )

    del config.apis[api_name]

    with open(config.config_path, "w", encoding="utf-8") as f:
        json.dump(config, f, indent=2)

    return {"message": f"API {api_name} deleted"}