diff --git a/app/model/RelProjUserModel.py b/app/model/RelProjUserModel.py new file mode 100644 index 0000000..e795d6e --- /dev/null +++ b/app/model/RelProjUserModel.py @@ -0,0 +1,74 @@ +from typing import Optional + +from pydantic import computed_field +from sqlalchemy.orm import selectinload +from sqlmodel import Field, Relationship, select + +from app.model.BasicModel import BasicModel +from app.model.ProjectModel import ProjectModel +from app.model.UserModel import UserServiceModel +from app.utils.create_module_service import create_model_service + + +class RelProjUserModel(BasicModel, table=True): + __tablename__ = "pl_rel_proj_user" + + # /*---------------------------------------user_id-------------------------------------------*/ + + user_id: str = Field( + default=None, + description="项目成员id", + foreign_key="pl_user.id", # 添加外键约束 + nullable=True + ) + + user_rel: Optional["UserServiceModel"] = Relationship( + sa_relationship_kwargs={ + "foreign_keys": "RelProjUserModel.user_id", + "remote_side": "UserServiceModel.id", + "uselist": False + } + ) + + @computed_field + @property + def user(self) -> Optional[UserServiceModel]: + return self.user_rel + + @user.setter + def user(self, value: Optional[UserServiceModel]) -> None: + pass + + # /*---------------------------------------proj_id-------------------------------------------*/ + + proj_id: str = Field( + default=None, + description="项目id", + foreign_key="pl_project.id", # 添加外键约束 + nullable=True + ) + + proj_rel: Optional["ProjectModel"] = Relationship( + sa_relationship_kwargs={ + "foreign_keys": "RelProjUserModel.proj_id", + "remote_side": "ProjectModel.id", + "uselist": False + } + ) + + @computed_field + @property + def project(self) -> Optional[ProjectModel]: + return self.proj_rel + + @project.setter + def project(self, value: Optional[ProjectModel]) -> None: + pass + + +RelProjUserService = create_model_service( + Cls=RelProjUserModel, + custom_query=lambda: select(RelProjUserModel) + .options(selectinload(RelProjUserModel.user_rel)) + .options(selectinload(RelProjUserModel.proj_rel)), +) diff --git a/app/server.py b/app/server.py index cbaeb92..c499725 100644 --- a/app/server.py +++ b/app/server.py @@ -26,6 +26,7 @@ from app.model.LlmProduct import LlmProductService from app.model.OrgModel import OrgService from app.model.PosModel import PosService from app.model.ProjectModel import ProjectService +from app.model.RelProjUserModel import RelProjUserService from app.run_uvicorn import run_uvicorn from app.utils.ModelInputSchema import ModelInputSchema from app.utils.add_async_route import add_async_route @@ -85,6 +86,7 @@ LgChatService.add_route(app=app, path="/lg_chat") OrgService.add_route(app=app, path="/org") PosService.add_route(app=app, path="/pos") ProjectService.add_route(app=app, path="/project") +RelProjUserService.add_route(app=app, path="/rel_proj_user") if __name__ == "__main__": run_uvicorn()