feat: add booking input validation

This commit is contained in:
2026-09-18 16:29:54 +08:00
parent 1e03d055aa
commit ae5f26baab
3 changed files with 47 additions and 5 deletions

View File

@@ -8,14 +8,16 @@ import {
Param,
Post,
Req,
ValidationPipe,
} from "@nestjs/common";
import { NestFactory } from "@nestjs/core";
import { Prisma } from "@prisma/client";
import { FastifyAdapter } from "@nestjs/platform-fastify";
import type { NestFastifyApplication } from "@nestjs/platform-fastify";
import { PrismaService } from "./prisma.service.js";
import { WechatAuthService } from "./wechat-auth.js";
import { BookingService } from "./booking.service.js";
import type { CreateBookingInput } from "./booking.service.js";
import { CreateBookingDto } from "./booking.dto.js";
import type { FastifyRequest } from "fastify";
import { createHmac } from "node:crypto";
@@ -115,13 +117,16 @@ export class CustomerBookingController {
) {}
@Post()
async create(@Req() request: FastifyRequest, @Body() body: CreateBookingInput): Promise<unknown> {
async create(@Req() request: FastifyRequest, @Body() body: CreateBookingDto): Promise<unknown> {
const identity = this.identity(request);
const customer = await this.prisma.customerUser.findUnique({
where: { brandId_openid: identity },
});
if (!customer) throw new BadRequestException("请先完成微信登录");
return this.bookings.create(identity.brandId, customer.id, body);
return this.bookings.create(identity.brandId, customer.id, {
...body,
extraData: body.extraData as Prisma.InputJsonObject,
});
}
@Get()
@@ -198,6 +203,9 @@ export class AppModule {}
export async function createApp(): Promise<NestFastifyApplication> {
const app = await NestFactory.create<NestFastifyApplication>(AppModule, new FastifyAdapter());
app.useGlobalPipes(
new ValidationPipe({ whitelist: true, forbidNonWhitelisted: true, transform: true }),
);
app.enableCors();
return app;
}