From 6a7ab72e128acc1c73c7c229486d8a9223acaf27 Mon Sep 17 00:00:00 2001 From: shancheas Date: Tue, 10 Jun 2025 14:29:46 +0700 Subject: [PATCH] feat: add booking description field to item model and database --- ...7252986-add-booking-description-to-item.ts | 19 +++++++++++++++++++ .../item/data/models/item.model.ts | 3 +++ .../item/domain/entities/item.entity.ts | 1 + .../usecases/managers/detail-item.manager.ts | 1 + .../usecases/managers/index-item.manager.ts | 1 + .../item/infrastructure/dto/item.dto.ts | 11 +++++++++++ 6 files changed, 36 insertions(+) create mode 100644 src/database/migrations/1749537252986-add-booking-description-to-item.ts diff --git a/src/database/migrations/1749537252986-add-booking-description-to-item.ts b/src/database/migrations/1749537252986-add-booking-description-to-item.ts new file mode 100644 index 0000000..f8456a8 --- /dev/null +++ b/src/database/migrations/1749537252986-add-booking-description-to-item.ts @@ -0,0 +1,19 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class AddBookingDescriptionToItem1749537252986 + implements MigrationInterface +{ + name = 'AddBookingDescriptionToItem1749537252986'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "items" ADD "booking_description" text`, + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "items" DROP COLUMN "booking_description"`, + ); + } +} diff --git a/src/modules/item-related/item/data/models/item.model.ts b/src/modules/item-related/item/data/models/item.model.ts index b565c4d..ca7951e 100644 --- a/src/modules/item-related/item/data/models/item.model.ts +++ b/src/modules/item-related/item/data/models/item.model.ts @@ -27,6 +27,9 @@ export class ItemModel @Column('varchar', { name: 'name', unique: true }) name: string; + @Column('text', { name: 'booking_description', nullable: true }) + booking_description: string; + @Column('varchar', { name: 'image_url', nullable: true }) image_url: string; diff --git a/src/modules/item-related/item/domain/entities/item.entity.ts b/src/modules/item-related/item/domain/entities/item.entity.ts index 995b113..8d4a0a7 100644 --- a/src/modules/item-related/item/domain/entities/item.entity.ts +++ b/src/modules/item-related/item/domain/entities/item.entity.ts @@ -18,4 +18,5 @@ export interface ItemEntity extends BaseStatusEntity { use_queue: boolean; show_to_booking: boolean; breakdown_bundling?: boolean; + booking_description?: string; } diff --git a/src/modules/item-related/item/domain/usecases/managers/detail-item.manager.ts b/src/modules/item-related/item/domain/usecases/managers/detail-item.manager.ts index 21e3e4b..7aae478 100644 --- a/src/modules/item-related/item/domain/usecases/managers/detail-item.manager.ts +++ b/src/modules/item-related/item/domain/usecases/managers/detail-item.manager.ts @@ -56,6 +56,7 @@ export class DetailItemManager extends BaseDetailManager { `${this.tableName}.show_to_booking`, `${this.tableName}.breakdown_bundling`, `${this.tableName}.play_estimation`, + `${this.tableName}.booking_description`, `item_category.id`, `item_category.name`, diff --git a/src/modules/item-related/item/domain/usecases/managers/index-item.manager.ts b/src/modules/item-related/item/domain/usecases/managers/index-item.manager.ts index 02204ed..1e5101a 100644 --- a/src/modules/item-related/item/domain/usecases/managers/index-item.manager.ts +++ b/src/modules/item-related/item/domain/usecases/managers/index-item.manager.ts @@ -54,6 +54,7 @@ export class IndexItemManager extends BaseIndexManager { `${this.tableName}.breakdown_bundling`, `${this.tableName}.play_estimation`, `${this.tableName}.show_to_booking`, + `${this.tableName}.booking_description`, `item_category.id`, `item_category.name`, diff --git a/src/modules/item-related/item/infrastructure/dto/item.dto.ts b/src/modules/item-related/item/infrastructure/dto/item.dto.ts index c1add0f..b91f3f5 100644 --- a/src/modules/item-related/item/infrastructure/dto/item.dto.ts +++ b/src/modules/item-related/item/infrastructure/dto/item.dto.ts @@ -138,6 +138,17 @@ export class ItemDto extends BaseStatusDto implements ItemEntity { @ValidateIf((body) => body.show_to_booking) show_to_booking: boolean; + @ApiProperty({ + type: String, + required: false, + example: '...', + }) + @ValidateIf((body) => body.show_to_booking) + @IsString({ + message: 'Booking description is required when show to booking is enabled.', + }) + booking_description: string; + @ApiProperty({ name: 'bundling_items', type: [Object],