feat: ProjectModel

This commit is contained in:
martsforever
2025-08-23 13:17:50 +08:00
parent 5c0ed094e0
commit 3c66644fab
2 changed files with 51 additions and 0 deletions
+49
View File
@@ -0,0 +1,49 @@
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.UserModel import UserServiceModel
from app.utils.create_module_service import create_model_service
class ProjectModel(BasicModel, table=True):
__tablename__ = "pl_project"
name: str = Field(default=None, description="项目名称")
description: str = Field(default=None, description="项目描述")
budget: float = Field(default=None, description="项目预算金额")
spent: float = Field(default=None, description="项目已花费金额")
version: int = Field(default=None, description="项目版本号")
leader_id: str = Field(
default=None,
description="项目负责人id",
foreign_key="pl_user.id", # 添加外键约束
nullable=True
)
leader: Optional["UserServiceModel"] = Relationship(
sa_relationship_kwargs={
"foreign_keys": "ProjectModel.leader_id",
"remote_side": "UserServiceModel.id",
"uselist": False
}
)
@computed_field
@property
def leader_name(self) -> Optional[str]:
return self.leader.full_name if self.leader else None
@leader_name.setter
def leader_name(self, value: Optional[str]) -> None:
pass
ProjectService = create_model_service(
Cls=ProjectModel,
custom_query=lambda: select(ProjectModel).options(selectinload(ProjectModel.leader)),
)
+2
View File
@@ -25,6 +25,7 @@ from app.model.LlmOrder import LlmOrderService
from app.model.LlmProduct import LlmProductService from app.model.LlmProduct import LlmProductService
from app.model.OrgModel import OrgService from app.model.OrgModel import OrgService
from app.model.PosModel import PosService from app.model.PosModel import PosService
from app.model.ProjectModel import ProjectService
from app.run_uvicorn import run_uvicorn from app.run_uvicorn import run_uvicorn
from app.utils.ModelInputSchema import ModelInputSchema from app.utils.ModelInputSchema import ModelInputSchema
from app.utils.add_async_route import add_async_route from app.utils.add_async_route import add_async_route
@@ -83,6 +84,7 @@ LgMessageService.add_route(app=app, path="/lg_message")
LgChatService.add_route(app=app, path="/lg_chat") LgChatService.add_route(app=app, path="/lg_chat")
OrgService.add_route(app=app, path="/org") OrgService.add_route(app=app, path="/org")
PosService.add_route(app=app, path="/pos") PosService.add_route(app=app, path="/pos")
ProjectService.add_route(app=app, path="/project")
if __name__ == "__main__": if __name__ == "__main__":
run_uvicorn() run_uvicorn()