""" 用户相关路由 """ from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from typing import List from ..core.database import get_db from ..models.user import User from ..schemas.user import UserResponse, UserUpdate, TransactionResponse, ChangePasswordRequest from ..services.user_service import UserService from ..utils.deps import get_current_user, get_current_admin router = APIRouter(prefix="/api/users", tags=["users"]) @router.get("/me", response_model=UserResponse) def get_me(current_user: User = Depends(get_current_user)): """ 获取当前用户信息 """ return current_user @router.get("/me/transactions", response_model=List[TransactionResponse]) def get_my_transactions( limit: int = 50, db: Session = Depends(get_db), current_user: User = Depends(get_current_user) ): """ 获取我的交易流水 """ return UserService.get_user_transactions(db, current_user.id, 0, limit) @router.post("/me/allowance") def claim_allowance( db: Session = Depends(get_db), current_user: User = Depends(get_current_user) ): """ 领取低保 """ try: UserService.claim_daily_allowance(db, current_user) return {"message": "低保领取成功", "balance": current_user.balance} except ValueError as e: raise HTTPException(status_code=400, detail=str(e)) @router.get("/me/allowance-info") def get_allowance_info( db: Session = Depends(get_db), current_user: User = Depends(get_current_user) ): """ 获取低保领取信息 """ return UserService.get_next_allowance_time(db, current_user) @router.get("/ranking/rich", response_model=List[UserResponse]) def get_rich_ranking( limit: int = 10, db: Session = Depends(get_db) ): """ 获取富豪榜 """ return UserService.get_rich_ranking(db, limit) @router.get("/", response_model=List[UserResponse]) def get_users( skip: int = 0, limit: int = 100, db: Session = Depends(get_db), current_user: User = Depends(get_current_admin) ): """ 获取用户列表(仅管理员) """ return db.query(User).offset(skip).limit(limit).all() @router.patch("/{user_id}", response_model=UserResponse) def update_user( user_id: int, user_data: UserUpdate, db: Session = Depends(get_db), current_user: User = Depends(get_current_admin) ): """ 更新用户信息(仅管理员) """ user = UserService.get_user_by_id(db, user_id) if not user: raise HTTPException(status_code=404, detail="User not found") return UserService.update_user(db, user, user_data) @router.post("/{user_id}/adjust-balance") def adjust_user_balance( user_id: int, amount: int, description: str, db: Session = Depends(get_db), current_user: User = Depends(get_current_admin) ): """ 管理员调整用户余额 """ user = UserService.get_user_by_id(db, user_id) if not user: raise HTTPException(status_code=404, detail="User not found") UserService.adjust_balance_with_version(db, user, amount, description, current_user) return {"message": "余额调整成功", "new_balance": user.balance} @router.post("/me/change-password") def change_password( change_request: ChangePasswordRequest, db: Session = Depends(get_db), current_user: User = Depends(get_current_user) ): """ 修改当前用户密码 """ try: UserService.change_password(db, current_user, change_request) return {"message": "密码修改成功"} except ValueError as e: raise HTTPException(status_code=400, detail=str(e))