add
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
"""激励模块路由(/referral/* + /assets/*,对应《03-接口文档》第 9 章)"""
|
||||
import redis.asyncio as aioredis
|
||||
from fastapi import APIRouter, Depends, Query, Request
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from app.core import ratelimit
|
||||
from app.core.response import ok
|
||||
from app.database import get_db
|
||||
from app.deps import Identity, require_user
|
||||
from app.redis_client import get_redis
|
||||
from app.schemas.incentive import BindInviteReq, WithdrawReq
|
||||
from app.services import incentive_service
|
||||
|
||||
router_referral = APIRouter(prefix="/referral", tags=["推荐"])
|
||||
router_assets = APIRouter(prefix="/assets", tags=["资产"])
|
||||
|
||||
|
||||
@router_referral.get("/me")
|
||||
async def get_my_referral(db: AsyncSession = Depends(get_db), redis: aioredis.Redis = Depends(get_redis),
|
||||
identity: Identity = Depends(require_user)):
|
||||
return ok(await incentive_service.get_my_referral(db, redis, identity.user_id))
|
||||
|
||||
|
||||
@router_referral.post("/bind")
|
||||
async def bind_invite_code(req: BindInviteReq, request: Request, db: AsyncSession = Depends(get_db),
|
||||
redis: aioredis.Redis = Depends(get_redis),
|
||||
identity: Identity = Depends(require_user)):
|
||||
ip = request.client.host if request.client else ""
|
||||
return ok(await incentive_service.bind_invite_code(
|
||||
db, redis, identity.user_id, req.invite_code, identity.device_id, ip
|
||||
))
|
||||
|
||||
|
||||
@router_assets.get("/me")
|
||||
async def get_my_assets(db: AsyncSession = Depends(get_db), redis: aioredis.Redis = Depends(get_redis),
|
||||
identity: Identity = Depends(require_user)):
|
||||
return ok(await incentive_service.get_my_assets(db, redis, identity.user_id))
|
||||
|
||||
|
||||
@router_assets.get("/records")
|
||||
async def list_asset_records(page: int = Query(1, ge=1), page_size: int = Query(20, ge=1, le=50),
|
||||
biz_type: int | None = Query(None),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
identity: Identity = Depends(require_user)):
|
||||
return ok(await incentive_service.list_asset_records(db, identity.user_id, page, page_size, biz_type))
|
||||
|
||||
|
||||
@router_assets.post("/withdraw")
|
||||
async def apply_withdraw(req: WithdrawReq, db: AsyncSession = Depends(get_db),
|
||||
redis: aioredis.Redis = Depends(get_redis),
|
||||
identity: Identity = Depends(require_user)):
|
||||
await ratelimit.hit_subject(redis, identity.subject, "withdraw", 1, 60, "提现申请过于频繁,请稍后再试")
|
||||
return ok(await incentive_service.apply_withdraw(
|
||||
db, redis, identity.user_id, req.assets, req.channel, req.account
|
||||
))
|
||||
|
||||
|
||||
@router_assets.get("/withdraw/records")
|
||||
async def list_withdraw_records(page: int = Query(1, ge=1), page_size: int = Query(20, ge=1, le=50),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
identity: Identity = Depends(require_user)):
|
||||
return ok(await incentive_service.list_withdraw_records(db, identity.user_id, page, page_size))
|
||||
Reference in New Issue
Block a user