增加返回部门信息
This commit is contained in:
parent
9c056ab391
commit
1343dbbdcb
|
|
@ -151,7 +151,7 @@ async def register(
|
||||||
|
|
||||||
return TokenResponse(
|
return TokenResponse(
|
||||||
access_token=access_token,
|
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(
|
return TokenResponse(
|
||||||
access_token=access_token,
|
access_token=access_token,
|
||||||
user=UserResponse(**user.dict())
|
user=await UserService.build_user_response(conn, user)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@auth_router.get("/me", response_model=UserResponse, summary="获取当前用户信息")
|
@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:
|
Args:
|
||||||
current_user: 当前登录用户
|
current_user: 当前登录用户
|
||||||
|
conn: 数据库连接
|
||||||
|
|
||||||
Returns:
|
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(
|
return TokenResponse(
|
||||||
access_token=access_token,
|
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(
|
return TokenResponse(
|
||||||
access_token=access_token,
|
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(
|
return TokenResponse(
|
||||||
access_token=access_token,
|
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
|
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):
|
class UserResponse(BaseModel):
|
||||||
"""用户响应模型(不包含敏感信息)"""
|
"""用户响应模型(不包含敏感信息)"""
|
||||||
id: int
|
id: int
|
||||||
|
|
@ -98,6 +107,8 @@ class UserResponse(BaseModel):
|
||||||
last_login_at: Optional[datetime] = None
|
last_login_at: Optional[datetime] = None
|
||||||
enterprise_id: Optional[int] = None
|
enterprise_id: Optional[int] = None
|
||||||
department_id: Optional[int] = None
|
department_id: Optional[int] = None
|
||||||
|
department_name: Optional[str] = None
|
||||||
|
department: Optional[UserDepartmentInfo] = None
|
||||||
role: str = "employee"
|
role: str = "employee"
|
||||||
is_first_login: bool = True
|
is_first_login: bool = True
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,8 @@ from datetime import datetime, timezone
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
import asyncpg
|
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 core.security import get_password_hash, verify_password
|
||||||
from logger.logging import get_logger
|
from logger.logging import get_logger
|
||||||
|
|
||||||
|
|
@ -392,3 +393,28 @@ class UserService:
|
||||||
)
|
)
|
||||||
return User(**dict(row))
|
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