feat(booking): Introduce comprehensive booking DTO, refine form validation, and enhance API docs

This commit is contained in:
ghost2023
2026-05-23 11:03:47 +03:00
parent a252b88dfb
commit 8a5652d7d9
5 changed files with 66 additions and 52 deletions

View File

@@ -13,7 +13,13 @@ import {
UseInterceptors,
} from "@nestjs/common";
import { AnyFilesInterceptor } from "@nestjs/platform-express";
import { ApiBody, ApiConsumes, ApiOperation, ApiTags } from "@nestjs/swagger";
import {
ApiBearerAuth,
ApiBody,
ApiConsumes,
ApiOperation,
ApiTags,
} from "@nestjs/swagger";
import { BookingsService } from "./bookings.service";
import { CreateBookingDto } from "./dto/create-booking.dto";
@@ -23,8 +29,9 @@ import { UpdateStatusDto } from "./dto/update-status.dto";
@ApiTags("bookings")
@Controller("bookings")
@ApiBearerAuth()
export class BookingsController {
constructor(private readonly bookingsService: BookingsService) {}
constructor(private readonly bookingsService: BookingsService) { }
// ── 1. Create booking (multipart/form-data) ──────────────────────────
@Post()
@@ -46,7 +53,16 @@ export class BookingsController {
@Body() dto: CreateBookingDto,
@UploadedFiles() files: Express.Multer.File[],
) {
console.log('[BookingsController] Files received:', files?.length, files?.map(f => ({ fieldname: f.fieldname, originalname: f.originalname, size: f.size, mimetype: f.mimetype })));
console.log(
"[BookingsController] Files received:",
files?.length,
files?.map((f) => ({
fieldname: f.fieldname,
originalname: f.originalname,
size: f.size,
mimetype: f.mimetype,
})),
);
return this.bookingsService.create(dto, files ?? []);
}
@@ -56,7 +72,8 @@ export class BookingsController {
@ApiConsumes("multipart/form-data")
@ApiOperation({
summary: "Update a draft booking",
description: "Only DRAFT bookings can be updated. New files are merged into existing documents.",
description:
"Only DRAFT bookings can be updated. New files are merged into existing documents.",
})
@ApiBody({ type: UpdateBookingDto })
update(
@@ -141,7 +158,8 @@ export class BookingsController {
@Delete(":id/consolidation")
@ApiOperation({
summary: "Remove consolidation pairing",
description: "Unpairs both bookings and returns them to PENDING_CONSOLIDATION status.",
description:
"Unpairs both bookings and returns them to PENDING_CONSOLIDATION status.",
})
removeConsolidation(@Param("id", ParseUUIDPipe) id: string) {
return this.bookingsService.removeConsolidation(id);
@@ -151,7 +169,8 @@ export class BookingsController {
@Get(":id/consolidation")
@ApiOperation({
summary: "Get consolidation details",
description: "Returns partner booking details and split billing information.",
description:
"Returns partner booking details and split billing information.",
})
getConsolidationDetails(@Param("id", ParseUUIDPipe) id: string) {
return this.bookingsService.getConsolidationDetails(id);