mirror of
https://gh-proxy.org/https://github.com/klinsmaya/SQLBot.git
synced 2026-11-10 18:26:55 +08:00
perf: Place the assistant menu in the workspace
This commit is contained in:
committed by
fit2cloud-chenyw
parent
b8b3727d17
commit
e54a5fe46f
@@ -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 ###
|
||||
@@ -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")
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user