Skip to content

Commit d7d13f6

Browse files
feat: Workspace
1 parent 9ec61a0 commit d7d13f6

File tree

4 files changed

+93
-2
lines changed

4 files changed

+93
-2
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
"""020_workspace_ddl
2+
3+
Revision ID: a6b44114c17f
4+
Revises: dcaecd481715
5+
Create Date: 2025-07-06 18:03:36.143060
6+
7+
"""
8+
from alembic import op
9+
import sqlalchemy as sa
10+
import sqlmodel.sql.sqltypes
11+
12+
13+
# revision identifiers, used by Alembic.
14+
revision = 'a6b44114c17f'
15+
down_revision = 'dcaecd481715'
16+
branch_labels = None
17+
depends_on = None
18+
19+
20+
def upgrade():
21+
op.create_table(
22+
'sys_workspace',
23+
sa.Column('id', sa.BigInteger(), primary_key=True, nullable=False),
24+
sa.Column('name', sa.String(255), nullable=False),
25+
sa.Column('create_time', sa.BigInteger(), default=0, nullable=False)
26+
)
27+
op.create_index(op.f('ix_sys_workspace_id'), 'sys_workspace', ['id'], unique=False)
28+
29+
30+
def downgrade():
31+
op.drop_table('sys_workspace')
32+
op.drop_index(op.f('ix_sys_workspace_id'), table_name='sys_workspace')

backend/apps/api.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@
44
from apps.dashboard.api import dashboard_api
55
from apps.datasource.api import datasource
66
from apps.settings.api import terminology
7-
from apps.system.api import login, user, aimodel
7+
from apps.system.api import login, user, aimodel, workspace
88
from apps.mcp import mcp
99

1010
api_router = APIRouter()
1111
api_router.include_router(login.router)
1212
api_router.include_router(user.router)
13+
api_router.include_router(workspace.router)
1314
api_router.include_router(aimodel.router)
1415
api_router.include_router(terminology.router)
1516
api_router.include_router(datasource.router)
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
from fastapi import APIRouter
2+
from sqlmodel import select
3+
from apps.system.models.system_model import WorkspaceBase, WorkspaceEditor, WorkspaceModel
4+
from common.core.deps import SessionDep
5+
from common.utils.time import get_timestamp
6+
7+
router = APIRouter(tags=["system/workspace"], prefix="/system/workspace")
8+
9+
@router.get("", response_model=list[WorkspaceModel])
10+
async def query(session: SessionDep):
11+
return session.exec(select(WorkspaceModel).order_by(WorkspaceModel.create_time)).all()
12+
13+
@router.post("")
14+
async def add(session: SessionDep, creator: WorkspaceBase):
15+
db_model = WorkspaceModel.model_validate(creator)
16+
db_model.create_time = get_timestamp()
17+
session.add(db_model)
18+
session.commit()
19+
20+
@router.put("")
21+
async def update(session: SessionDep, editor: WorkspaceEditor):
22+
id = editor.id
23+
db_model = session.get(WorkspaceModel, id)
24+
if not db_model:
25+
raise ValueError(f"WorkspaceModel with id {id} not found")
26+
update_data = WorkspaceModel.model_validate(editor)
27+
db_model.sqlmodel_update(update_data)
28+
session.add(db_model)
29+
session.commit()
30+
31+
@router.get("/{id}", response_model=WorkspaceModel)
32+
async def get_one(session: SessionDep, id: int):
33+
db_model = session.get(WorkspaceModel, id)
34+
if not db_model:
35+
raise ValueError(f"WorkspaceModel with id {id} not found")
36+
return db_model
37+
38+
@router.delete("/{id}")
39+
async def delete(session: SessionDep, id: int):
40+
db_model = session.get(WorkspaceModel, id)
41+
if not db_model:
42+
raise ValueError(f"WorkspaceModel with id {id} not found")
43+
session.delete(db_model)
44+
session.commit()

backend/apps/system/models/system_model.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11

22
from sqlmodel import BigInteger, Field, Text, SQLModel
33
from common.core.models import SnowflakeBase
4+
from common.core.schemas import BaseCreatorDTO
45

56

67
class AiModelBase:
@@ -17,4 +18,17 @@ class AiModelDetail(SnowflakeBase, AiModelBase, table=True):
1718
protocol: int = Field(nullable=False, default = 1)
1819
config: str = Field(sa_type = Text())
1920
status: int = Field(nullable=False, default = 1)
20-
create_time: int = Field(default=0, sa_type=BigInteger())
21+
create_time: int = Field(default=0, sa_type=BigInteger())
22+
23+
24+
25+
26+
class WorkspaceBase(SQLModel):
27+
name: str = Field(max_length=255, nullable=False)
28+
29+
class WorkspaceEditor(WorkspaceBase, BaseCreatorDTO):
30+
pass
31+
32+
class WorkspaceModel(SnowflakeBase, WorkspaceBase, table=True):
33+
__tablename__ = "sys_workspace"
34+
create_time: int = Field(default=0, sa_type=BigInteger())

0 commit comments

Comments
 (0)