|
from flask_restful import Resource, marshal_with, reqparse |
|
from sqlalchemy import select |
|
from sqlalchemy.orm import Session |
|
|
|
from controllers.console import api |
|
from controllers.console.app.wraps import get_app_model |
|
from controllers.console.wraps import account_initialization_required, setup_required |
|
from extensions.ext_database import db |
|
from fields.conversation_variable_fields import paginated_conversation_variable_fields |
|
from libs.login import login_required |
|
from models import ConversationVariable |
|
from models.model import AppMode |
|
|
|
|
|
class ConversationVariablesApi(Resource): |
|
@setup_required |
|
@login_required |
|
@account_initialization_required |
|
@get_app_model(mode=AppMode.ADVANCED_CHAT) |
|
@marshal_with(paginated_conversation_variable_fields) |
|
def get(self, app_model): |
|
parser = reqparse.RequestParser() |
|
parser.add_argument("conversation_id", type=str, location="args") |
|
args = parser.parse_args() |
|
|
|
stmt = ( |
|
select(ConversationVariable) |
|
.where(ConversationVariable.app_id == app_model.id) |
|
.order_by(ConversationVariable.created_at) |
|
) |
|
if args["conversation_id"]: |
|
stmt = stmt.where(ConversationVariable.conversation_id == args["conversation_id"]) |
|
else: |
|
raise ValueError("conversation_id is required") |
|
|
|
|
|
page = 1 |
|
page_size = 100 |
|
stmt = stmt.limit(page_size).offset((page - 1) * page_size) |
|
|
|
with Session(db.engine) as session: |
|
rows = session.scalars(stmt).all() |
|
|
|
return { |
|
"page": page, |
|
"limit": page_size, |
|
"total": len(rows), |
|
"has_more": False, |
|
"data": [ |
|
{ |
|
"created_at": row.created_at, |
|
"updated_at": row.updated_at, |
|
**row.to_variable().model_dump(), |
|
} |
|
for row in rows |
|
], |
|
} |
|
|
|
|
|
api.add_resource(ConversationVariablesApi, "/apps/<uuid:app_id>/conversation-variables") |
|
|