123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- from typing import Dict, List
- from fastapi import APIRouter, Depends
- from sqlalchemy.ext.asyncio import AsyncSession
- from sqlmodel import select
- from app.api.deps import get_async_session, get_token_id
- from app.libs.paginate import cursor_page, CommonPage
- from app.models.action import Action, ActionRead
- from app.models.token_relation import RelationType
- from app.providers.auth_provider import auth_policy
- from app.schemas.common import DeleteResponse, BaseSuccessDataResponse
- from app.schemas.tool.action import ActionBulkCreateRequest, ActionUpdateRequest, ActionRunRequest
- from app.services.tool.action import ActionService
- router = APIRouter()
- @router.get("", response_model=CommonPage[ActionRead])
- async def list_actions(*, session: AsyncSession = Depends(get_async_session), token_id=Depends(get_token_id)):
- """
- Returns a list of Actions.
- """
- statement = auth_policy.token_filter(
- select(Action), field=Action.id, relation_type=RelationType.Action, token_id=token_id
- )
- page = await cursor_page(statement, session)
- page.data = [ast.model_dump(by_alias=True) for ast in page.data]
- return page.model_dump(by_alias=True)
- @router.post("", response_model=List[ActionRead])
- async def create_actions(
- *, session: AsyncSession = Depends(get_async_session), body: ActionBulkCreateRequest, token_id=Depends(get_token_id)
- ):
- """
- Create an action with openapi schema.
- """
- actions = await ActionService.create_actions(session=session, body=body, token_id=token_id)
- actions = [item.model_dump(by_alias=True) for item in actions]
- return actions
- @router.get("/{action_id}", response_model=ActionRead)
- async def get_action(*, session: AsyncSession = Depends(get_async_session), action_id: str):
- """
- Retrieves an action.
- """
- action = await ActionService.get_action(session=session, action_id=action_id)
- return action.model_dump(by_alias=True)
- @router.post("/{action_id}", response_model=ActionRead)
- async def modify_action(
- *, session: AsyncSession = Depends(get_async_session), action_id: str, body: ActionUpdateRequest
- ):
- """
- Modifies an action.
- """
- action = await ActionService.modify_action(session=session, action_id=action_id, body=body)
- return action.model_dump(by_alias=True)
- @router.delete("/{action_id}", response_model=DeleteResponse)
- async def delete_action(*, session: AsyncSession = Depends(get_async_session), action_id: str) -> DeleteResponse:
- """
- Delete an action.
- """
- return await ActionService.delete_action(session=session, action_id=action_id)
- @router.post(
- "/{action_id}/run",
- response_model=BaseSuccessDataResponse,
- )
- async def api_run_action(*, session: AsyncSession = Depends(get_async_session), action_id: str, body: ActionRunRequest):
- response: Dict = await ActionService.run_action(
- session=session,
- action_id=action_id,
- parameters=body.parameters,
- headers=body.headers,
- )
- return BaseSuccessDataResponse(data=response)
|