增加返回部门信息
This commit is contained in:
parent
9c056ab391
commit
1343dbbdcb
|
|
@ -151,7 +151,7 @@ async def register(
|
|||
|
||||
return TokenResponse(
|
||||
access_token=access_token,
|
||||
user=UserResponse(**user.dict())
|
||||
user=await UserService.build_user_response(conn, user)
|
||||
)
|
||||
|
||||
|
||||
|
|
@ -188,22 +188,26 @@ async def login(
|
|||
|
||||
return TokenResponse(
|
||||
access_token=access_token,
|
||||
user=UserResponse(**user.dict())
|
||||
user=await UserService.build_user_response(conn, user)
|
||||
)
|
||||
|
||||
|
||||
@auth_router.get("/me", response_model=UserResponse, summary="获取当前用户信息")
|
||||
async def get_me(current_user: User = Depends(get_current_user)):
|
||||
async def get_me(
|
||||
current_user: User = Depends(get_current_user),
|
||||
conn: asyncpg.Connection = Depends(get_db),
|
||||
):
|
||||
"""
|
||||
获取当前登录用户信息
|
||||
|
||||
Args:
|
||||
current_user: 当前登录用户
|
||||
conn: 数据库连接
|
||||
|
||||
Returns:
|
||||
UserResponse: 用户信息
|
||||
UserResponse: 用户信息(含部门名称等)
|
||||
"""
|
||||
return UserResponse(**current_user.dict())
|
||||
return await UserService.build_user_response(conn, current_user)
|
||||
|
||||
|
||||
# ==================== 手机号注册/登录接口 ====================
|
||||
|
|
@ -297,7 +301,7 @@ async def phone_register(
|
|||
|
||||
return TokenResponse(
|
||||
access_token=access_token,
|
||||
user=UserResponse(**user.dict())
|
||||
user=await UserService.build_user_response(conn, user)
|
||||
)
|
||||
|
||||
|
||||
|
|
@ -350,7 +354,7 @@ async def phone_login(
|
|||
|
||||
return TokenResponse(
|
||||
access_token=access_token,
|
||||
user=UserResponse(**user.dict())
|
||||
user=await UserService.build_user_response(conn, user)
|
||||
)
|
||||
|
||||
|
||||
|
|
@ -403,7 +407,7 @@ async def wechat_login(
|
|||
|
||||
return TokenResponse(
|
||||
access_token=access_token,
|
||||
user=UserResponse(**user.dict())
|
||||
user=await UserService.build_user_response(conn, user)
|
||||
)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -81,6 +81,15 @@ class UserLogin(BaseModel):
|
|||
password: str
|
||||
|
||||
|
||||
class UserDepartmentInfo(BaseModel):
|
||||
"""用户所属部门信息"""
|
||||
id: int
|
||||
name: str
|
||||
parent_id: Optional[int] = None
|
||||
leader_user_id: Optional[int] = None
|
||||
leader_name: Optional[str] = None
|
||||
|
||||
|
||||
class UserResponse(BaseModel):
|
||||
"""用户响应模型(不包含敏感信息)"""
|
||||
id: int
|
||||
|
|
@ -98,6 +107,8 @@ class UserResponse(BaseModel):
|
|||
last_login_at: Optional[datetime] = None
|
||||
enterprise_id: Optional[int] = None
|
||||
department_id: Optional[int] = None
|
||||
department_name: Optional[str] = None
|
||||
department: Optional[UserDepartmentInfo] = None
|
||||
role: str = "employee"
|
||||
is_first_login: bool = True
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,8 @@ from datetime import datetime, timezone
|
|||
from typing import Optional
|
||||
import asyncpg
|
||||
|
||||
from models.user import User, UserCreate
|
||||
from models.user import User, UserCreate, UserResponse, UserDepartmentInfo
|
||||
from services.department_service import DepartmentService
|
||||
from core.security import get_password_hash, verify_password
|
||||
from logger.logging import get_logger
|
||||
|
||||
|
|
@ -392,3 +393,28 @@ class UserService:
|
|||
)
|
||||
return User(**dict(row))
|
||||
|
||||
@staticmethod
|
||||
async def build_user_response(conn: asyncpg.Connection, user: User) -> UserResponse:
|
||||
"""构建含部门信息的用户响应"""
|
||||
department = None
|
||||
department_name = None
|
||||
if user.department_id is not None and user.enterprise_id is not None:
|
||||
dept = await DepartmentService.get_by_id(
|
||||
conn, user.department_id, user.enterprise_id
|
||||
)
|
||||
if dept:
|
||||
department_name = dept["name"]
|
||||
department = UserDepartmentInfo(
|
||||
id=dept["id"],
|
||||
name=dept["name"],
|
||||
parent_id=dept.get("parent_id"),
|
||||
leader_user_id=dept.get("leader_user_id"),
|
||||
leader_name=dept.get("leader_name"),
|
||||
)
|
||||
data = user.model_dump(exclude={"hashed_password"})
|
||||
return UserResponse(
|
||||
**data,
|
||||
department_name=department_name,
|
||||
department=department,
|
||||
)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue