import { Body, Controller, Get, Param, Post } from '@nestjs/common'; import { z } from 'zod'; import { CurrentUser, type AuthPrincipal } from '../../common/auth'; import { AppError } from '../../common/errors'; import { OrdersService } from './orders.service'; const createSchema = z.object({ courseCode: z.string().min(1), quantity: z.coerce.number().int().min(1).max(10).optional(), /** 下单设备,小程序上报;缺省不影响下单,只是后台看不到渠道 */ terminal: z.string().max(16).optional(), }); @Controller('v1/orders') export class OrdersController { constructor(private readonly orders: OrdersService) {} @Post() create(@CurrentUser() user: AuthPrincipal, @Body() body: unknown) { const parsed = createSchema.safeParse(body); if (!parsed.success) throw AppError.badRequest('参数错误:缺少 courseCode'); return this.orders.create( user.id, parsed.data.courseCode, parsed.data.quantity ?? 1, parsed.data.terminal ?? null, ); } @Get() list(@CurrentUser() user: AuthPrincipal) { return this.orders.list(user.id); } @Get(':outTradeNo') status(@CurrentUser() user: AuthPrincipal, @Param('outTradeNo') outTradeNo: string) { return this.orders.status(user.id, outTradeNo); } }