deliveryman-api/app/api/endpoints/point.py
2025-01-07 10:24:40 +08:00

55 lines
1.8 KiB
Python

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),
current_user: UserDB = Depends(get_admin_user) # 仅管理员可操作
):
"""增加用户积分"""
user = db.query(UserDB).filter(UserDB.userid == current_user.userid).first()
# 创建积分记录
point_record = PointRecordDB(
user_id=user.userid,
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
])