Files
dukang/server/dukang-api/src/modules/redeem/redeem.controller.ts
T
2026-07-12 10:34:58 +08:00

82 lines
2.8 KiB
TypeScript

import { Body, Controller, Get, Param, Post, Query, UseGuards } from '@nestjs/common';
import { RedeemService } from './redeem.service';
import { JwtAuthGuard, AuthUser } from '../../common/guards/jwt-auth.guard';
import { CurrentUser } from '../../common/decorators/current-user.decorator';
import {
RedeemPhoneBalanceDto,
RedeemPhoneConfirmDto,
RedeemPhonePrepareDto,
RedeemPhoneSendLookupSmsDto,
} from './dto/phone-redeem.dto';
@Controller('redeem')
@UseGuards(JwtAuthGuard)
export class UserRedeemController {
constructor(private readonly redeemService: RedeemService) {}
@Post('tokens')
createToken(@CurrentUser() user: AuthUser, @Body() body: Record<string, unknown>) {
return this.redeemService.createToken(user.actorId, body as never);
}
@Get('tokens/:token')
getToken(@Param('token') token: string) {
return this.redeemService.getToken(token);
}
@Get('tokens/:token/status')
getTokenStatus(@CurrentUser() user: AuthUser, @Param('token') token: string) {
return this.redeemService.getTokenStatus(token, user.actorId);
}
@Post('ratings')
rating(@CurrentUser() user: AuthUser, @Body() body: Record<string, unknown>) {
return this.redeemService.submitRating(user.actorId, body as never);
}
}
@Controller('shop/redeem')
@UseGuards(JwtAuthGuard)
export class ShopRedeemController {
constructor(private readonly redeemService: RedeemService) {}
@Post('preview')
preview(@CurrentUser() user: AuthUser, @Body() body: { token: string }) {
return this.redeemService.previewRedeem(user.actorId, body.token);
}
@Post('confirm')
confirm(@CurrentUser() user: AuthUser, @Body() body: { token: string }) {
return this.redeemService.confirmRedeem(user.actorId, body);
}
@Get('records')
records(
@CurrentUser() user: AuthUser,
@Query('page') page = '1',
@Query('pageSize') pageSize = '20',
) {
return this.redeemService.listShopRecords(user.actorId, Number(page), Number(pageSize));
}
@Post('phone/send-lookup-sms')
sendPhoneLookupSms(@CurrentUser() user: AuthUser, @Body() body: RedeemPhoneSendLookupSmsDto) {
return this.redeemService.sendPhoneLookupSms(user.actorId, body.phone);
}
@Post('phone/balance')
phoneBalance(@CurrentUser() user: AuthUser, @Body() body: RedeemPhoneBalanceDto) {
return this.redeemService.verifyPhoneAndGetBalance(user.actorId, body.phone, body.code);
}
@Post('phone/prepare')
phonePrepare(@CurrentUser() user: AuthUser, @Body() body: RedeemPhonePrepareDto) {
return this.redeemService.preparePhoneRedeem(user.actorId, body.sessionId, body.amount);
}
@Post('phone/confirm')
phoneConfirm(@CurrentUser() user: AuthUser, @Body() body: RedeemPhoneConfirmDto) {
return this.redeemService.confirmPhoneRedeem(user.actorId, body.sessionId, body.code);
}
}