From 261a660019f2169ba5e3519459898119e5a69f9e Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Mon, 7 Jul 2025 17:34:57 +0800 Subject: [PATCH] feat: UserWorkspace --- backend/alembic/versions/021_user_ws_ddl.py | 33 ++++++++++++++++++++ backend/apps/system/api/workspace.py | 19 ++++++++--- backend/apps/system/models/system_model.py | 10 +++++- backend/apps/system/schemas/system_schema.py | 8 ++++- 4 files changed, 64 insertions(+), 6 deletions(-) create mode 100644 backend/alembic/versions/021_user_ws_ddl.py diff --git a/backend/alembic/versions/021_user_ws_ddl.py b/backend/alembic/versions/021_user_ws_ddl.py new file mode 100644 index 00000000..c5f90fa7 --- /dev/null +++ b/backend/alembic/versions/021_user_ws_ddl.py @@ -0,0 +1,33 @@ +"""021_user_ws_ddl + +Revision ID: 440e9e41da3c +Revises: a6b44114c17f +Create Date: 2025-07-07 17:21:46.858887 + +""" +from alembic import op +import sqlalchemy as sa +import sqlmodel.sql.sqltypes + + +# revision identifiers, used by Alembic. +revision = '440e9e41da3c' +down_revision = 'a6b44114c17f' +branch_labels = None +depends_on = None + + +def upgrade(): + op.create_table( + 'sys_user_ws', + sa.Column('id', sa.BigInteger(), primary_key=True, nullable=False), + sa.Column('uid', sa.BigInteger(), nullable=False), + sa.Column('oid', sa.BigInteger(), nullable=False), + sa.Column('weight', sa.Integer(), nullable=False) + ) + op.create_index(op.f('ix_sys_user_ws_id'), 'sys_user_ws', ['id'], unique=False) + + +def downgrade(): + op.drop_index(op.f('ix_sys_user_ws_id'), table_name='sys_user_ws') + op.drop_table('sys_user_ws') diff --git a/backend/apps/system/api/workspace.py b/backend/apps/system/api/workspace.py index 44f28689..4afcae22 100644 --- a/backend/apps/system/api/workspace.py +++ b/backend/apps/system/api/workspace.py @@ -1,6 +1,7 @@ from fastapi import APIRouter from sqlmodel import select -from apps.system.models.system_model import WorkspaceBase, WorkspaceEditor, WorkspaceModel +from apps.system.models.system_model import UserWsModel, WorkspaceBase, WorkspaceEditor, WorkspaceModel +from apps.system.schemas.system_schema import UserWsBase, UserWsDTO from common.core.deps import SessionDep, Trans from common.utils.time import get_timestamp @@ -49,6 +50,16 @@ async def delete(session: SessionDep, id: int): session.delete(db_model) session.commit() -@router.post("/user/{id}") -async def bindUser(session: SessionDep, user_id: int): - pass \ No newline at end of file +@router.post("/uws") +async def create(session: SessionDep, creator: UserWsDTO): + db_model = UserWsModel.model_validate(creator) + session.add(db_model) + session.commit() + +@router.delete("/uws") +async def delete(session: SessionDep, dto: UserWsBase): + db_model: UserWsModel = session.exec(select(UserWsModel).where(UserWsModel.uid == dto.uid, UserWsModel.oid == dto.oid)).first() + if not db_model: + raise ValueError(f"UserWsModel not found") + session.delete(db_model) + session.commit() \ No newline at end of file diff --git a/backend/apps/system/models/system_model.py b/backend/apps/system/models/system_model.py index 4d318e33..dd2eb374 100644 --- a/backend/apps/system/models/system_model.py +++ b/backend/apps/system/models/system_model.py @@ -31,4 +31,12 @@ class WorkspaceEditor(WorkspaceBase, BaseCreatorDTO): class WorkspaceModel(SnowflakeBase, WorkspaceBase, table=True): __tablename__ = "sys_workspace" - create_time: int = Field(default=0, sa_type=BigInteger()) \ No newline at end of file + create_time: int = Field(default=0, sa_type=BigInteger()) + +class UserWsBaseModel(SQLModel): + uid: int = Field(nullable=False, sa_type=BigInteger()) + oid: int = Field(nullable=False, sa_type=BigInteger()) + weight: int = Field(default=0, nullable=False) + +class UserWsModel(SnowflakeBase, UserWsBaseModel, table=True): + __tablename__ = "sys_user_ws" \ No newline at end of file diff --git a/backend/apps/system/schemas/system_schema.py b/backend/apps/system/schemas/system_schema.py index d87ad615..f512e72f 100644 --- a/backend/apps/system/schemas/system_schema.py +++ b/backend/apps/system/schemas/system_schema.py @@ -41,4 +41,10 @@ class UserGrid(UserEditor): class PwdEditor(BaseModel): pwd: str - new_pwd: str \ No newline at end of file + new_pwd: str + +class UserWsBase(BaseModel): + uid: int + oid: int +class UserWsDTO(UserWsBase): + weight: int = 0 \ No newline at end of file