40 lines
1.3 KiB
TypeScript
40 lines
1.3 KiB
TypeScript
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);
|
|
}
|
|
}
|