from fastapi import APIRouter, Depends from sqlalchemy.orm import Session from app.models.point import PointRecordDB, PointRecordCreate, PointRecordInfo from app.models.user import UserDB from app.models.database import get_db from app.api.deps import get_current_user, get_admin_user from app.core.response import success_response, error_response, ResponseModel from typing import List from decimal import Decimal router = APIRouter() @router.post("", response_model=ResponseModel) async def add_points( record: PointRecordCreate, db: Session = Depends(get_db), admin: UserDB = Depends(get_admin_user) # 仅管理员可操作 ): """增加用户积分""" user = db.query(UserDB).filter(UserDB.userid == record.user_id).first() if not user: return error_response(code=404, message="用户不存在") # 创建积分记录 point_record = PointRecordDB( user_id=record.user_id, points=record.points, description=record.description ) db.add(point_record) # 更新用户积分 user.points = user.points + Decimal(str(record.points)) try: db.commit() db.refresh(point_record) return success_response(data=PointRecordInfo.model_validate(point_record)) except Exception as e: db.rollback() return error_response(code=500, message=f"操作失败: {str(e)}") @router.get("/records", response_model=ResponseModel) async def get_point_records( db: Session = Depends(get_db), current_user: UserDB = Depends(get_current_user) ): """获取积分明细""" records = db.query(PointRecordDB).filter( PointRecordDB.user_id == current_user.userid ).order_by( PointRecordDB.create_time.desc() ).all() return success_response(data=[ PointRecordInfo.model_validate(r) for r in records ])