feat: 创建接口

This commit is contained in:
李如威 2025-09-22 17:28:21 +08:00
parent fcb82396c6
commit ab5f99144c
1 changed files with 35 additions and 5 deletions

View File

@ -2,15 +2,14 @@ import asyncio
import datetime import datetime
import json import json
import os import os
from pydoc import cli
import uvicorn import uvicorn
import uuid import uuid
import time import time
from tool import format_content_uuid import traceback
import models.db as DB import models.db as DB
import nodes as F import nodes as F
from tool import format_content_uuid
from tortoise.transactions import in_transaction from tortoise.transactions import in_transaction
from tortoise.expressions import Subquery
from tortoise.functions import Max from tortoise.functions import Max
from fastapi import FastAPI, Depends, HTTPException from fastapi import FastAPI, Depends, HTTPException
from models.schemas.system import InitStatusResponse, InitConfigRequest, BaseResponse, TableResponse from models.schemas.system import InitStatusResponse, InitConfigRequest, BaseResponse, TableResponse
@ -24,7 +23,7 @@ from contextlib import asynccontextmanager
from fastapi.security import OAuth2PasswordBearer from fastapi.security import OAuth2PasswordBearer
from fastapi.responses import StreamingResponse from fastapi.responses import StreamingResponse
from apscheduler.schedulers.asyncio import AsyncIOScheduler from apscheduler.schedulers.asyncio import AsyncIOScheduler
import traceback
# 简单的登陆状态存储 # 简单的登陆状态存储
sessions: dict[str, tuple[float, DB.User]] = {} sessions: dict[str, tuple[float, DB.User]] = {}
@ -310,11 +309,38 @@ def create_app():
res.append(obj) res.append(obj)
return TableResponse(data=res, total=len(res)) return TableResponse(data=res, total=len(res))
@app.post("/api/flows", tags=["Flow"], description="任务创建", response_model=BaseResponse)
async def create_flow(body: WorkRequest, user: DB.User = Depends(get_current_user)):
work = DB.Work()
work.uuid = uuid.uuid4().hex
work.creator_id = user.id
work.work_title = body.work_title
work.work_desc = body.work_desc
work_content = DB.WorkContent(
user_id=work.creator_id,
content=[],
is_deleted=0,
work_id=0,
)
work_content.content = format_content_uuid(body.content)
work_content.update_time = datetime.datetime.now()
async with in_transaction():
await work.save()
work_content.work_id = work.id
await work_content.save()
return BaseResponse()
@app.put("/api/flows", tags=["Flow"], description="任务修改", response_model=BaseResponse) @app.put("/api/flows", tags=["Flow"], description="任务修改", response_model=BaseResponse)
async def update_flow(work_uuid: str, body: WorkRequest, user: DB.User = Depends(get_current_user)): async def update_flow(work_uuid: str, body: WorkRequest, user: DB.User = Depends(get_current_user)):
work = await DB.Work.filter(uuid=work_uuid).first() work = await DB.Work.filter(uuid=work_uuid).first()
if not work: if not work:
return BaseResponse(success=False, message="Not Found") return BaseResponse(success=False, message="Not Found")
work.work_title = body.work_title
work.work_desc = body.work_desc
work.update_time = datetime.datetime.now()
work_content = await DB.WorkContent.filter(work_id=work.id).first() work_content = await DB.WorkContent.filter(work_id=work.id).first()
if not work_content: if not work_content:
work_content = DB.WorkContent( work_content = DB.WorkContent(
@ -325,7 +351,10 @@ def create_app():
) )
work_content.content = format_content_uuid(body.content) work_content.content = format_content_uuid(body.content)
work_content.update_time = datetime.datetime.now() work_content.update_time = datetime.datetime.now()
await work_content.save()
async with in_transaction():
await work.save()
await work_content.save()
return BaseResponse() return BaseResponse()
@app.get("/api/flows/detail", tags=["Flow"], description="任务详情", response_model=BaseResponse) @app.get("/api/flows/detail", tags=["Flow"], description="任务详情", response_model=BaseResponse)
@ -391,5 +420,6 @@ def create_app():
app = create_app() app = create_app()
if __name__ == "__main__": if __name__ == "__main__":
uvicorn.run("main:app", host="0.0.0.0", port=8080, reload=True) uvicorn.run("main:app", host="0.0.0.0", port=8080, reload=True)