perf: Place the assistant menu in the workspace

This commit is contained in:
fit2cloud-chenyw
2026-01-09 17:40:42 +08:00
committed by fit2cloud-chenyw
parent b8b3727d17
commit e54a5fe46f
12 changed files with 121 additions and 34 deletions
@@ -0,0 +1,48 @@
"""061_assistant_oid_ddl
Revision ID: 547df942eb90
Revises: b40e41c67db3
Create Date: 2026-01-09 15:02:19.891766
"""
import json
from alembic import op
import sqlalchemy as sa
import sqlmodel.sql.sqltypes
from sqlalchemy.dialects import postgresql
# revision identifiers, used by Alembic.
revision = '547df942eb90'
down_revision = 'b40e41c67db3'
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.add_column('sys_assistant', sa.Column('oid', sa.BigInteger(), nullable=True))
conn = op.get_bind()
conn.execute(sa.text("UPDATE sys_assistant SET oid = 1 WHERE oid IS NULL"))
rows = conn.execute(
sa.text("SELECT id, configuration FROM sys_assistant WHERE type = 0 AND configuration IS NOT NULL")
)
for row in rows:
try:
config = json.loads(row.configuration) if isinstance(row.configuration, str) else row.configuration
oid_value = config.get('oid', 1) if isinstance(config, dict) else 1
if isinstance(oid_value, int) and oid_value != 1:
conn.execute(
sa.text("UPDATE sys_assistant SET oid = :oid WHERE id = :id"),
{"oid": oid_value, "id": row.id}
)
except (json.JSONDecodeError, TypeError, AttributeError):
pass
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_column('sys_assistant', 'oid')
# ### end Alembic commands ###
+6 -5
View File
@@ -15,7 +15,7 @@ from apps.system.models.system_model import AssistantModel
from apps.system.schemas.auth import CacheName, CacheNamespace
from apps.system.schemas.system_schema import AssistantBase, AssistantDTO, AssistantUiSchema, AssistantValidator
from common.core.config import settings
from common.core.deps import SessionDep, Trans
from common.core.deps import SessionDep, Trans, CurrentUser
from common.core.security import create_access_token
from common.core.sqlbot_cache import clear_cache
from common.utils.utils import get_origin_from_referer, origin_match_domain
@@ -165,8 +165,8 @@ async def clear_ui_cache(id: int):
@router.get("", response_model=list[AssistantModel], summary=f"{PLACEHOLDER_PREFIX}assistant_grid_api", description=f"{PLACEHOLDER_PREFIX}assistant_grid_api")
async def query(session: SessionDep):
list_result = session.exec(select(AssistantModel).where(AssistantModel.type != 4).order_by(AssistantModel.name,
async def query(session: SessionDep, current_user: CurrentUser):
list_result = session.exec(select(AssistantModel).where(AssistantModel.oid == current_user.oid, AssistantModel.type != 4).order_by(AssistantModel.name,
AssistantModel.create_time)).all()
return list_result
@@ -180,8 +180,9 @@ async def query_advanced_application(session: SessionDep):
@router.post("", summary=f"{PLACEHOLDER_PREFIX}assistant_create_api", description=f"{PLACEHOLDER_PREFIX}assistant_create_api")
@system_log(LogConfig(operation_type=OperationType.CREATE, module=OperationModules.APPLICATION, result_id_expr="id"))
async def add(request: Request, session: SessionDep, creator: AssistantBase):
return await save(request, session, creator)
async def add(request: Request, session: SessionDep, current_user: CurrentUser, creator: AssistantBase):
oid = current_user.oid if creator.type != 4 else 1
return await save(request, session, creator, oid)
@router.put("", summary=f"{PLACEHOLDER_PREFIX}assistant_update_api", description=f"{PLACEHOLDER_PREFIX}assistant_update_api")
+3 -1
View File
@@ -1,5 +1,6 @@
from typing import Optional
from fastapi import FastAPI, Request
from sqlmodel import Session, select
from starlette.middleware.cors import CORSMiddleware
@@ -32,9 +33,10 @@ def dynamic_upgrade_cors(request: Request, session: Session):
cors_middleware.kwargs['allow_origins'] = updated_origins
async def save(request: Request, session: Session, creator: AssistantBase):
async def save(request: Request, session: Session, creator: AssistantBase, oid: Optional[int] = 1):
db_model = AssistantModel.model_validate(creator)
db_model.create_time = get_timestamp()
db_model.oid = oid
session.add(db_model)
session.commit()
dynamic_upgrade_cors(request=request, session=session)
@@ -52,6 +52,7 @@ class AssistantBaseModel(SQLModel):
create_time: int = Field(default=0, sa_type=BigInteger())
app_id: Optional[str] = Field(default=None, max_length=255, nullable=True)
app_secret: Optional[str] = Field(default=None, max_length=255, nullable=True)
oid: Optional[int] = Field(nullable=True, sa_type=BigInteger(), default=1)
class AssistantModel(SnowflakeBase, AssistantBaseModel, table=True):
__tablename__ = "sys_assistant"