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) { 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) { 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); } }