Skip to content

Commit 9d49434

Browse files
authored
feat:Recommended questions support user configuration. (#487)
1 parent 85b19fb commit 9d49434

File tree

13 files changed

+264
-4
lines changed

13 files changed

+264
-4
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
"""empty message
2+
3+
Revision ID: e408f8766753
4+
Revises: cb12c4238120
5+
Create Date: 2025-11-24 17:34:04.436927
6+
7+
"""
8+
from alembic import op
9+
import sqlalchemy as sa
10+
import sqlmodel.sql.sqltypes
11+
from sqlalchemy.dialects import postgresql
12+
13+
# revision identifiers, used by Alembic.
14+
revision = 'e408f8766753'
15+
down_revision = 'cb12c4238120'
16+
branch_labels = None
17+
depends_on = None
18+
19+
20+
def upgrade():
21+
op.create_table('ds_recommended_problem',
22+
sa.Column('id', sa.BIGINT(),
23+
sa.Identity(always=True, start=1, increment=1, minvalue=1, maxvalue=9999999999,
24+
cycle=False, cache=1), autoincrement=True, nullable=False),
25+
sa.Column('datasource_id', sa.BIGINT(), autoincrement=False, nullable=True),
26+
sa.Column('question', sa.TEXT(), autoincrement=False, nullable=True),
27+
sa.Column('remark', sa.TEXT(), autoincrement=False, nullable=True),
28+
sa.Column('sort', sa.BIGINT(), autoincrement=False, nullable=True),
29+
sa.Column('create_time', postgresql.TIMESTAMP(precision=6), autoincrement=False, nullable=True),
30+
sa.Column('create_by', sa.BIGINT(), autoincrement=False, nullable=True),
31+
sa.PrimaryKeyConstraint('id', name=op.f('ds_recommended_problem_pkey'))
32+
)
33+
op.add_column('core_datasource', sa.Column('recommended_config', sa.BigInteger(),default=0, nullable=True))
34+
35+
def downgrade():
36+
op.drop_table('ds_recommended_problem')
37+
op.drop_column('core_datasource', 'recommended_config')
38+

backend/apps/api.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from apps.chat.api import chat
44
from apps.dashboard.api import dashboard_api
55
from apps.data_training.api import data_training
6-
from apps.datasource.api import datasource, table_relation
6+
from apps.datasource.api import datasource, table_relation, recommended_problem
77
from apps.mcp import mcp
88
from apps.system.api import login, user, aimodel, workspace, assistant
99
from apps.terminology.api import terminology
@@ -23,3 +23,5 @@
2323
api_router.include_router(dashboard_api.router)
2424
api_router.include_router(mcp.router)
2525
api_router.include_router(table_relation.router)
26+
27+
api_router.include_router(recommended_problem.router)
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from fastapi import APIRouter
2+
3+
from apps.datasource.crud.recommended_problem import get_datasource_recommended
4+
from common.core.deps import SessionDep
5+
6+
router = APIRouter(tags=["recommended_problem"], prefix="/recommended_problem")
7+
8+
9+
@router.get("/get_datasource_recommended/{ds_id}")
10+
async def datasource_recommended(session: SessionDep, ds_id: int):
11+
return get_datasource_recommended(session, ds_id)
12+
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from sqlmodel import select
2+
3+
from common.core.deps import SessionDep
4+
from ..models.datasource import DsRecommendedProblem
5+
6+
7+
def get_datasource_recommended(session: SessionDep, ds_id: int):
8+
statement = select(DsRecommendedProblem).where(DsRecommendedProblem.datasource_id == ds_id)
9+
dsRecommendedProblem = session.exec(statement)
10+
return dsRecommendedProblem
11+

backend/apps/datasource/models/datasource.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ class CoreDatasource(SQLModel, table=True):
2222
oid: int = Field(sa_column=Column(BigInteger()))
2323
table_relation: List = Field(sa_column=Column(JSONB, nullable=True))
2424
embedding: str = Field(sa_column=Column(Text, nullable=True))
25+
recommended_config: int = Field(sa_column=Column(BigInteger()))
2526

2627

2728
class CoreTable(SQLModel, table=True):
@@ -34,6 +35,16 @@ class CoreTable(SQLModel, table=True):
3435
custom_comment: str = Field(sa_column=Column(Text))
3536
embedding: str = Field(sa_column=Column(Text, nullable=True))
3637

38+
class DsRecommendedProblem(SQLModel, table=True):
39+
__tablename__ = "ds_recommended_problem"
40+
id: int = Field(sa_column=Column(BigInteger, Identity(always=True), nullable=False, primary_key=True))
41+
datasource_id: int = Field(sa_column=Column(BigInteger()))
42+
question: str = Field(sa_column=Column(Text))
43+
remark: str = Field(sa_column=Column(Text))
44+
sort: int = Field(sa_column=Column(BigInteger()))
45+
create_time: datetime = Field(sa_column=Column(DateTime(timezone=False), nullable=True))
46+
create_by: int = Field(sa_column=Column(BigInteger()))
47+
3748

3849
class CoreField(SQLModel, table=True):
3950
__tablename__ = "core_field"
@@ -61,6 +72,7 @@ class CreateDatasource(BaseModel):
6172
num: str = ''
6273
oid: int = 1
6374
tables: List[CoreTable] = []
75+
recommended_config: int = 1
6476

6577

6678
# edit local saved table and fields

frontend/src/api/recommendedApi.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { request } from '@/utils/request'
2+
3+
export const recommendedApi = {
4+
get_recommended_problem: (dsId: any) =>
5+
request.get(`/recommended_problem/get_datasource_recommended/${dsId}`),
6+
save_recommended_problem: (data: any) => request.post(`/recommended_problem/save`, data),
7+
}
Lines changed: 1 addition & 0 deletions
Loading

frontend/src/i18n/en.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,6 +308,12 @@
308308
}
309309
},
310310
"datasource": {
311+
"recommended_problem_configuration": "Recommended Problem Configuration",
312+
"problem_generation_method": "Problem Generation Method",
313+
"ai_automatic_generation": "AI Automatic Generation",
314+
"user_defined": "User Defined",
315+
"question_tips": "Please enter recommended questions",
316+
"add_question": "Add Question",
311317
"data_source_yet": "No data source yet",
312318
"search_by_name": "Search by Name",
313319
"search": "Search",

frontend/src/i18n/ko-KR.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,6 +308,12 @@
308308
}
309309
},
310310
"datasource": {
311+
"recommended_problem_configuration": "추천 문제 구성",
312+
"problem_generation_method": "문제 생성 방식",
313+
"ai_automatic_generation": "AI 자동 생성",
314+
"user_defined": "사용자 정의",
315+
"question_tips": "추천 문제를 입력해 주세요",
316+
"add_question": "문제 추가",
311317
"data_source_yet": "데이터 소스가 없습니다",
312318
"search_by_name": "이름으로 검색",
313319
"search": "검색",

frontend/src/i18n/zh-CN.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,6 +308,12 @@
308308
}
309309
},
310310
"datasource": {
311+
"recommended_problem_configuration": "推荐问题配置",
312+
"problem_generation_method": "问题生成方式",
313+
"ai_automatic_generation": "AI 自动生成",
314+
"user_defined": "用户自定义",
315+
"question_tips": "请输入推荐问题",
316+
"add_question": "添加问题",
311317
"data_source_yet": "暂无数据源",
312318
"search_by_name": "通过名称搜索",
313319
"search": "搜索",

0 commit comments

Comments
 (0)