| 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") |
|
|