Files
SQLBot/backend/apps/system/api/user.py
T
2025-07-07 12:49:05 +08:00

83 lines
3.0 KiB
Python

from fastapi import APIRouter
from apps.system.crud.user import get_db_user, get_user_info
from apps.system.models.user import UserModel
from apps.system.schemas.system_schema import PwdEditor, UserCreator, UserEditor, UserGrid, UserLanguage
from common.core.deps import CurrentUser, SessionDep
from common.core.pagination import Paginator
from common.core.schemas import PaginatedResponse, PaginationParams
from common.core.security import md5pwd, verify_md5pwd
from common.utils.time import get_timestamp
router = APIRouter(tags=["user"], prefix="/user")
@router.get("/info")
async def user_info(session: SessionDep, current_user: CurrentUser):
db_user = get_user_info(session=session, user_id=current_user.id)
if not db_user:
return {"message": "User not found"}
db_user.password = None
return db_user
@router.get("/pager/{pageNum}/{pageSize}", response_model=PaginatedResponse[UserGrid])
async def pager(
session: SessionDep,
pageNum: int,
pageSize: int
):
pagination = PaginationParams(page=pageNum, size=pageSize)
paginator = Paginator(session)
filters = {}
return await paginator.get_paginated_response(
model=UserModel,
pagination=pagination,
**filters)
@router.get("/{id}", response_model=UserEditor)
async def query(session: SessionDep, id: int) -> UserEditor:
db_user: UserModel = get_db_user(session = session, user_id = id)
return db_user
@router.post("")
async def create(session: SessionDep, creator: UserCreator):
data = creator.model_dump(exclude_unset=True)
user_model = UserModel.model_validate(data)
#user_model.create_time = get_timestamp()
user_model.language = "zh-CN"
session.add(user_model)
session.commit()
@router.put("")
async def update(session: SessionDep, editor: UserEditor):
user_model: UserModel = get_db_user(session = session, user_id = editor.id)
data = editor.model_dump(exclude_unset=True)
user_model.sqlmodel_update(data)
session.add(user_model)
session.commit()
@router.delete("/{id}")
async def delete(session: SessionDep, id: int):
user_model: UserModel = get_db_user(session = session, user_id = id)
session.delete(user_model)
session.commit()
@router.put("/language")
async def langChange(session: SessionDep, current_user: CurrentUser, language: UserLanguage):
lang = language.language
if lang not in ["zh-CN", "en"]:
return {"message": "Language not supported"}
db_user: UserModel = get_db_user(session=session, user_id=current_user.id)
db_user.language = lang
session.add(db_user)
session.commit()
return {"message": "Language changed successfully", "language": lang}
@router.put("/pwd")
async def pwdUpdate(session: SessionDep, current_user: CurrentUser, editor: PwdEditor):
db_user: UserModel = get_db_user(session=session, user_id=current_user.id)
if not verify_md5pwd(editor.pwd, db_user.password):
raise RuntimeError("pwd error")
db_user.password = md5pwd(editor.new_pwd)
session.add(db_user)
session.commit()