From ad90a5b082a5073ceb72672e3734418ae6c5a3d2 Mon Sep 17 00:00:00 2001 From: azeeee05 Date: Mon, 10 Aug 2026 19:13:22 +0530 Subject: [PATCH] feat: extend master-data module with new preference and category entities and initialization script --- database/seed-master-data.sql | 62 ++++++++++++++++++- .../entities/airline-preference.entity.ts | 28 +++++++++ .../entities/cabin-preference.entity.ts | 28 +++++++++ .../entities/meal-category.entity.ts | 28 +++++++++ .../entities/seat-category.entity.ts | 28 +++++++++ .../master-data/entities/seat-type.entity.ts | 28 +++++++++ src/modules/master-data/master-data.module.ts | 10 +++ .../master-data/master-data.service.ts | 35 +++++++++++ 8 files changed, 245 insertions(+), 2 deletions(-) create mode 100644 src/modules/master-data/entities/airline-preference.entity.ts create mode 100644 src/modules/master-data/entities/cabin-preference.entity.ts create mode 100644 src/modules/master-data/entities/meal-category.entity.ts create mode 100644 src/modules/master-data/entities/seat-category.entity.ts create mode 100644 src/modules/master-data/entities/seat-type.entity.ts diff --git a/database/seed-master-data.sql b/database/seed-master-data.sql index 2b673c0..1799ea4 100644 --- a/database/seed-master-data.sql +++ b/database/seed-master-data.sql @@ -270,7 +270,12 @@ SELECT code, name, "tableName", description, "displayOrder", true FROM (VALUES ('meal-type', 'Meal Type', 'tbl_meal_types', 'Meal Type master', 40), ('airport-restriction', 'Airport Restriction', 'tbl_airport_restrictions', 'Airport Restriction master', 41), ('destination-type', 'Destination Type', 'tbl_destination_types', 'Destination Type master', 42), - ('vehicle-category', 'Vehicle Category', 'tbl_vehicle_categories', 'Vehicle Category master', 43) + ('vehicle-category', 'Vehicle Category', 'tbl_vehicle_categories', 'Vehicle Category master', 43), + ('cabin-preference', 'Cabin Preference', 'tbl_cabin_preferences', 'Cabin Preference master', 44), + ('airline-preference', 'Airline Preference', 'tbl_airline_preferences', 'Airline Preference master', 45), + ('seat-type', 'Seat Type', 'tbl_seat_types', 'Seat Type master', 46), + ('meal-category', 'Meal Category', 'tbl_meal_categories', 'Meal Category master', 47), + ('seat-category', 'Seat Category', 'tbl_seat_categories', 'Seat Category master', 48) ) AS t(code, name, "tableName", description, "displayOrder") WHERE NOT EXISTS (SELECT 1 FROM masters.tbl_rules_categories WHERE masters.tbl_rules_categories.code = t.code); @@ -320,7 +325,12 @@ FROM (VALUES ('meal-type', 'tbl_meal_types'), ('airport-restriction', 'tbl_airport_restrictions'), ('destination-type', 'tbl_destination_types'), - ('vehicle-category', 'tbl_vehicle_categories') + ('vehicle-category', 'tbl_vehicle_categories'), + ('cabin-preference', 'tbl_cabin_preferences'), + ('airline-preference', 'tbl_airline_preferences'), + ('seat-type', 'tbl_seat_types'), + ('meal-category', 'tbl_meal_categories'), + ('seat-category', 'tbl_seat_categories') ) AS v(code, "tableName") WHERE c.code = v.code AND (c."tableName" IS NULL OR c."tableName" != v."tableName"); @@ -737,3 +747,51 @@ SELECT label, value, true FROM (VALUES ('Premium Van', 'premium-van') ) AS t(label, value) WHERE NOT EXISTS (SELECT 1 FROM masters.tbl_vehicle_categories WHERE masters.tbl_vehicle_categories.value = t.value); + +-- 47. Cabin Preferences +INSERT INTO masters.tbl_cabin_preferences (label, value, "isActive") +SELECT label, value, true FROM (VALUES + ('Same Cabin', 'same-cabin'), + ('Upgrade if Available', 'upgrade-if-available'), + ('Lowest Available', 'lowest-available') +) AS t(label, value) +WHERE NOT EXISTS (SELECT 1 FROM masters.tbl_cabin_preferences WHERE masters.tbl_cabin_preferences.value = t.value); + +-- 48. Airline Preferences +INSERT INTO masters.tbl_airline_preferences (label, value, "isActive") +SELECT label, value, true FROM (VALUES + ('Same Airline', 'same-airline'), + ('Alliance Airline', 'alliance-airline'), + ('Any Partner', 'any-partner') +) AS t(label, value) +WHERE NOT EXISTS (SELECT 1 FROM masters.tbl_airline_preferences WHERE masters.tbl_airline_preferences.value = t.value); + +-- 49. Seat Types +INSERT INTO masters.tbl_seat_types (label, value, "isActive") +SELECT label, value, true FROM (VALUES + ('Extra Legroom', 'extra-legroom'), + ('Exit Row', 'exit-row'), + ('Preferred', 'preferred'), + ('Premium', 'premium') +) AS t(label, value) +WHERE NOT EXISTS (SELECT 1 FROM masters.tbl_seat_types WHERE masters.tbl_seat_types.value = t.value); + +-- 50. Meal Categories +INSERT INTO masters.tbl_meal_categories (label, value, "isActive") +SELECT label, value, true FROM (VALUES + ('Vegetarian', 'vegetarian'), + ('Non-Vegetarian', 'non-vegetarian'), + ('Vegan', 'vegan'), + ('Child Meal', 'child-meal') +) AS t(label, value) +WHERE NOT EXISTS (SELECT 1 FROM masters.tbl_meal_categories WHERE masters.tbl_meal_categories.value = t.value); + +-- 51. Seat Categories +INSERT INTO masters.tbl_seat_categories (label, value, "isActive") +SELECT label, value, true FROM (VALUES + ('Standard', 'standard'), + ('Preferred', 'preferred'), + ('Exit Row', 'exit-row'), + ('Extra Legroom', 'extra-legroom') +) AS t(label, value) +WHERE NOT EXISTS (SELECT 1 FROM masters.tbl_seat_categories WHERE masters.tbl_seat_categories.value = t.value); diff --git a/src/modules/master-data/entities/airline-preference.entity.ts b/src/modules/master-data/entities/airline-preference.entity.ts new file mode 100644 index 0000000..1b66483 --- /dev/null +++ b/src/modules/master-data/entities/airline-preference.entity.ts @@ -0,0 +1,28 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + CreateDateColumn, + UpdateDateColumn, +} from 'typeorm'; + +@Entity({ name: 'tbl_airline_preferences', schema: 'masters' }) +export class AirlinePreference { + @PrimaryGeneratedColumn('uuid') + id!: string; + + @Column() + label!: string; + + @Column() + value!: string; + + @Column({ default: true }) + isActive!: boolean; + + @CreateDateColumn() + createdAt!: Date; + + @UpdateDateColumn() + updatedAt!: Date; +} diff --git a/src/modules/master-data/entities/cabin-preference.entity.ts b/src/modules/master-data/entities/cabin-preference.entity.ts new file mode 100644 index 0000000..96d57a1 --- /dev/null +++ b/src/modules/master-data/entities/cabin-preference.entity.ts @@ -0,0 +1,28 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + CreateDateColumn, + UpdateDateColumn, +} from 'typeorm'; + +@Entity({ name: 'tbl_cabin_preferences', schema: 'masters' }) +export class CabinPreference { + @PrimaryGeneratedColumn('uuid') + id!: string; + + @Column() + label!: string; + + @Column() + value!: string; + + @Column({ default: true }) + isActive!: boolean; + + @CreateDateColumn() + createdAt!: Date; + + @UpdateDateColumn() + updatedAt!: Date; +} diff --git a/src/modules/master-data/entities/meal-category.entity.ts b/src/modules/master-data/entities/meal-category.entity.ts new file mode 100644 index 0000000..6be3eb4 --- /dev/null +++ b/src/modules/master-data/entities/meal-category.entity.ts @@ -0,0 +1,28 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + CreateDateColumn, + UpdateDateColumn, +} from 'typeorm'; + +@Entity({ name: 'tbl_meal_categories', schema: 'masters' }) +export class MealCategory { + @PrimaryGeneratedColumn('uuid') + id!: string; + + @Column() + label!: string; + + @Column() + value!: string; + + @Column({ default: true }) + isActive!: boolean; + + @CreateDateColumn() + createdAt!: Date; + + @UpdateDateColumn() + updatedAt!: Date; +} diff --git a/src/modules/master-data/entities/seat-category.entity.ts b/src/modules/master-data/entities/seat-category.entity.ts new file mode 100644 index 0000000..793692d --- /dev/null +++ b/src/modules/master-data/entities/seat-category.entity.ts @@ -0,0 +1,28 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + CreateDateColumn, + UpdateDateColumn, +} from 'typeorm'; + +@Entity({ name: 'tbl_seat_categories', schema: 'masters' }) +export class SeatCategory { + @PrimaryGeneratedColumn('uuid') + id!: string; + + @Column() + label!: string; + + @Column() + value!: string; + + @Column({ default: true }) + isActive!: boolean; + + @CreateDateColumn() + createdAt!: Date; + + @UpdateDateColumn() + updatedAt!: Date; +} diff --git a/src/modules/master-data/entities/seat-type.entity.ts b/src/modules/master-data/entities/seat-type.entity.ts new file mode 100644 index 0000000..6aef604 --- /dev/null +++ b/src/modules/master-data/entities/seat-type.entity.ts @@ -0,0 +1,28 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + CreateDateColumn, + UpdateDateColumn, +} from 'typeorm'; + +@Entity({ name: 'tbl_seat_types', schema: 'masters' }) +export class SeatType { + @PrimaryGeneratedColumn('uuid') + id!: string; + + @Column() + label!: string; + + @Column() + value!: string; + + @Column({ default: true }) + isActive!: boolean; + + @CreateDateColumn() + createdAt!: Date; + + @UpdateDateColumn() + updatedAt!: Date; +} diff --git a/src/modules/master-data/master-data.module.ts b/src/modules/master-data/master-data.module.ts index 0536d69..9daab2f 100644 --- a/src/modules/master-data/master-data.module.ts +++ b/src/modules/master-data/master-data.module.ts @@ -53,6 +53,11 @@ import { MealType } from './entities/meal-type.entity'; import { AirportRestriction } from './entities/airport-restriction.entity'; import { DestinationType } from './entities/destination-type.entity'; import { VehicleCategory } from './entities/vehicle-category.entity'; +import { CabinPreference } from './entities/cabin-preference.entity'; +import { AirlinePreference } from './entities/airline-preference.entity'; +import { SeatType } from './entities/seat-type.entity'; +import { MealCategory } from './entities/meal-category.entity'; +import { SeatCategory } from './entities/seat-category.entity'; @Module({ imports: [ @@ -106,6 +111,11 @@ import { VehicleCategory } from './entities/vehicle-category.entity'; AirportRestriction, DestinationType, VehicleCategory, + CabinPreference, + AirlinePreference, + SeatType, + MealCategory, + SeatCategory, ]), ], controllers: [MasterDataController], diff --git a/src/modules/master-data/master-data.service.ts b/src/modules/master-data/master-data.service.ts index 25e3608..5376639 100644 --- a/src/modules/master-data/master-data.service.ts +++ b/src/modules/master-data/master-data.service.ts @@ -54,6 +54,11 @@ import { MealType } from './entities/meal-type.entity'; import { AirportRestriction } from './entities/airport-restriction.entity'; import { DestinationType } from './entities/destination-type.entity'; import { VehicleCategory } from './entities/vehicle-category.entity'; +import { CabinPreference } from './entities/cabin-preference.entity'; +import { AirlinePreference } from './entities/airline-preference.entity'; +import { SeatType } from './entities/seat-type.entity'; +import { MealCategory } from './entities/meal-category.entity'; +import { SeatCategory } from './entities/seat-category.entity'; import { CreateActionCategoryDto } from './dto/create-action-category.dto'; import { UpdateActionCategoryDto } from './dto/update-action-category.dto'; @@ -119,6 +124,11 @@ export class MasterDataService implements OnModuleInit { @InjectRepository(AirportRestriction) private airportRestrictionRepo: Repository, @InjectRepository(DestinationType) private destinationTypeRepo: Repository, @InjectRepository(VehicleCategory) private vehicleCategoryRepo: Repository, + @InjectRepository(CabinPreference) private cabinPreferenceRepo: Repository, + @InjectRepository(AirlinePreference) private airlinePreferenceRepo: Repository, + @InjectRepository(SeatType) private seatTypeRepo: Repository, + @InjectRepository(MealCategory) private mealCategoryRepo: Repository, + @InjectRepository(SeatCategory) private seatCategoryRepo: Repository, ) { } private getRepositoryByCategory(category: string): Repository { @@ -315,6 +325,31 @@ export class MasterDataService implements OnModuleInit { case 'TBL_VEHICLE_CATEGORIES': return this.vehicleCategoryRepo; + case 'CABIN_PREFERENCE': + case 'CABIN_PREFERENCES': + case 'TBL_CABIN_PREFERENCES': + return this.cabinPreferenceRepo; + + case 'AIRLINE_PREFERENCE': + case 'AIRLINE_PREFERENCES': + case 'TBL_AIRLINE_PREFERENCES': + return this.airlinePreferenceRepo; + + case 'SEAT_TYPE': + case 'SEAT_TYPES': + case 'TBL_SEAT_TYPES': + return this.seatTypeRepo; + + case 'MEAL_CATEGORY': + case 'MEAL_CATEGORIES': + case 'TBL_MEAL_CATEGORIES': + return this.mealCategoryRepo; + + case 'SEAT_CATEGORY': + case 'SEAT_CATEGORIES': + case 'TBL_SEAT_CATEGORIES': + return this.seatCategoryRepo; + default: throw new BadRequestException(`Invalid category: ${category}`); }