|
1 | 1 | from datetime import timedelta |
2 | | -from fastapi import APIRouter, FastAPI, Request |
| 2 | +from typing import Optional |
| 3 | +from fastapi import APIRouter, FastAPI, Query, Request, Response |
3 | 4 | from sqlmodel import Session, select |
4 | 5 | from apps.system.crud.assistant import get_assistant_info |
5 | 6 | from apps.system.models.system_model import AssistantModel |
|
13 | 14 | from common.core.config import settings |
14 | 15 | router = APIRouter(tags=["system/assistant"], prefix="/system/assistant") |
15 | 16 |
|
16 | | -@router.get("/validator/{id}", response_model=AssistantValidator) |
17 | | -async def info(session: SessionDep, id: str): |
18 | | - as_id, flag = id.split('-') |
19 | | - db_model = get_assistant_info(session, as_id) |
| 17 | +@router.get("/info/{id}") |
| 18 | +async def info(request: Request, response: Response, session: SessionDep, id: int) -> dict: |
| 19 | + db_model = await get_assistant_info(session=session, assistant_id=id) |
| 20 | + if not db_model: |
| 21 | + raise RuntimeError(f"assistant application not exist") |
| 22 | + db_model = AssistantModel.model_validate(db_model) |
| 23 | + response.headers["Access-Control-Allow-Origin"] = db_model.domain |
| 24 | + origin = request.headers.get("origin") or request.headers.get("referer") |
| 25 | + origin = origin.rstrip('/') |
| 26 | + """ if origin != db_model.domain: |
| 27 | + raise RuntimeError("invalid domain [{origin}]") """ |
| 28 | + return db_model.model_dump() |
| 29 | + |
| 30 | +@router.get("/validator", response_model=AssistantValidator) |
| 31 | +async def info(session: SessionDep, id: str, virtual: Optional[int] = Query(None), online: Optional[bool] = Query(default=False)): |
| 32 | + db_model = await get_assistant_info(session=session, assistant_id=id) |
20 | 33 | if not db_model: |
21 | 34 | return AssistantValidator() |
| 35 | + db_model = AssistantModel.model_validate(db_model) |
22 | 36 | access_token_expires = timedelta(minutes=settings.ACCESS_TOKEN_EXPIRE_MINUTES) |
23 | 37 | assistantDict = { |
24 | | - "id": flag, "account": 'sqlbot-inner-assistant', "oid": 1, "assistant_id": id |
| 38 | + "id": virtual, "account": 'sqlbot-inner-assistant', "oid": 1, "assistant_id": id |
25 | 39 | } |
26 | 40 | access_token = create_access_token( |
27 | 41 | assistantDict, expires_delta=access_token_expires |
@@ -58,9 +72,10 @@ async def update(request: Request, session: SessionDep, editor: AssistantDTO): |
58 | 72 |
|
59 | 73 | @router.get("/{id}", response_model=AssistantModel) |
60 | 74 | async def get_one(session: SessionDep, id: int): |
61 | | - db_model = get_assistant_info(session, id) |
| 75 | + db_model = await get_assistant_info(session=session, assistant_id=id) |
62 | 76 | if not db_model: |
63 | 77 | raise ValueError(f"AssistantModel with id {id} not found") |
| 78 | + db_model = AssistantModel.model_validate(db_model) |
64 | 79 | return db_model |
65 | 80 |
|
66 | 81 | @router.delete("/{id}") |
|
0 commit comments