import { Body, Controller, Get, Param, Post, Delete, UseGuards, SetMetadata, Query, } from "@nestjs/common"; import { ApiTags, ApiOperation, ApiBearerAuth } from "@nestjs/swagger"; import { WalletService } from "./wallet.service"; import { JwtGuard } from "../../common/jwt.guard"; @ApiTags("Wallet") @Controller("wallet") @UseGuards(JwtGuard) @ApiBearerAuth("JWT-auth") // @Throttle({ strict: { limit: 20, ttl: 60_000 } }) export class WalletController { constructor(private service: WalletService) {} @Get("accounts") @SetMetadata("isPublic", true) @ApiOperation({ summary: "List all wallet accounts" }) getAccounts(@Query() q: any) { return this.service.getAccounts(q); } @Get(":passengerId") @ApiOperation({ summary: "Get wallet balance and ledger" }) getWallet(@Param("passengerId") id: string) { return this.service.getWallet(id); } @Post(":passengerId/topup") @ApiOperation({ summary: "Top up wallet" }) topUp( @Param("passengerId") id: string, @Body("amountMinor") amount: number, ) { return this.service.topUp(id, amount); } @Delete("accounts/:id") @SetMetadata("isPublic", true) @ApiOperation({ summary: "Delete wallet account" }) deleteAccount(@Param("id") id: string) { return this.service.deleteAccount(id); } }