add discount to package
This commit is contained in:
@@ -65,15 +65,27 @@ export class PackageDetail {
|
|||||||
@Property({ type: "decimal", unsigned: true })
|
@Property({ type: "decimal", unsigned: true })
|
||||||
quadPrice!: number;
|
quadPrice!: number;
|
||||||
|
|
||||||
|
@Property({ type: "decimal", unsigned: true })
|
||||||
|
quadDiscount!: number;
|
||||||
|
|
||||||
@Property({ type: "decimal", unsigned: true })
|
@Property({ type: "decimal", unsigned: true })
|
||||||
triplePrice!: number;
|
triplePrice!: number;
|
||||||
|
|
||||||
|
@Property({ type: "decimal", unsigned: true })
|
||||||
|
tripleDiscount!: number;
|
||||||
|
|
||||||
@Property({ type: "decimal", unsigned: true })
|
@Property({ type: "decimal", unsigned: true })
|
||||||
doublePrice!: number;
|
doublePrice!: number;
|
||||||
|
|
||||||
|
@Property({ type: "decimal", unsigned: true })
|
||||||
|
doubleDiscount!: number;
|
||||||
|
|
||||||
@Property({ type: "decimal", nullable: true, unsigned: true })
|
@Property({ type: "decimal", nullable: true, unsigned: true })
|
||||||
infantPrice!: number | null;
|
infantPrice!: number | null;
|
||||||
|
|
||||||
|
@Property({ type: "decimal", nullable: true, unsigned: true })
|
||||||
|
infantDiscount!: number | null;
|
||||||
|
|
||||||
@ManyToOne(() => PackageItinerary, {
|
@ManyToOne(() => PackageItinerary, {
|
||||||
cascade: [Cascade.REMOVE],
|
cascade: [Cascade.REMOVE],
|
||||||
})
|
})
|
||||||
|
|||||||
3504
src/database/migrations/.snapshot-goumrah.json
Normal file
3504
src/database/migrations/.snapshot-goumrah.json
Normal file
File diff suppressed because it is too large
Load Diff
25
src/database/migrations/Migration20251203114705.ts
Normal file
25
src/database/migrations/Migration20251203114705.ts
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
import { Migration } from "@mikro-orm/migrations";
|
||||||
|
|
||||||
|
export class Migration20251203114705 extends Migration {
|
||||||
|
override async up(): Promise<void> {
|
||||||
|
const knex = this.getKnex();
|
||||||
|
|
||||||
|
await knex.schema.alterTable("packages", (table) => {
|
||||||
|
table.decimal("quad_discount", 10, 2).notNullable().defaultTo(0);
|
||||||
|
table.decimal("triple_discount", 10, 2).notNullable().defaultTo(0);
|
||||||
|
table.decimal("double_discount", 10, 2).notNullable().defaultTo(0);
|
||||||
|
table.decimal("infant_discount", 10, 2).notNullable().defaultTo(0);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
override async down(): Promise<void> {
|
||||||
|
const knex = this.getKnex();
|
||||||
|
|
||||||
|
await knex.schema.alterTable("packages", (table) => {
|
||||||
|
table.dropColumn("quad_discount");
|
||||||
|
table.dropColumn("triple_discount");
|
||||||
|
table.dropColumn("double_discount");
|
||||||
|
table.dropColumn("infant_discount");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -675,9 +675,13 @@ export class PackageController extends Controller {
|
|||||||
madinahHotel: madinahHotel,
|
madinahHotel: madinahHotel,
|
||||||
transportation: transportationClass,
|
transportation: transportationClass,
|
||||||
quadPrice: body.quad_price,
|
quadPrice: body.quad_price,
|
||||||
|
quadDiscount: body.quad_discount,
|
||||||
triplePrice: body.triple_price,
|
triplePrice: body.triple_price,
|
||||||
|
tripleDiscount: body.triple_discount,
|
||||||
doublePrice: body.double_price,
|
doublePrice: body.double_price,
|
||||||
|
doubleDiscount: body.double_discount,
|
||||||
infantPrice: body.infant_price,
|
infantPrice: body.infant_price,
|
||||||
|
infantDiscount: body.infant_discount,
|
||||||
itinerary: itineraryEntity,
|
itinerary: itineraryEntity,
|
||||||
createdAt: new Date(),
|
createdAt: new Date(),
|
||||||
updatedAt: new Date(),
|
updatedAt: new Date(),
|
||||||
@@ -1258,9 +1262,13 @@ export class PackageController extends Controller {
|
|||||||
madinahHotel: madinahHotel,
|
madinahHotel: madinahHotel,
|
||||||
transportation: transportationClass,
|
transportation: transportationClass,
|
||||||
quadPrice: body.quad_price,
|
quadPrice: body.quad_price,
|
||||||
|
quadDiscount: body.quad_discount,
|
||||||
triplePrice: body.triple_price,
|
triplePrice: body.triple_price,
|
||||||
|
tripleDiscount: body.triple_discount,
|
||||||
doublePrice: body.double_price,
|
doublePrice: body.double_price,
|
||||||
|
doubleDiscount: body.double_discount,
|
||||||
infantPrice: body.infant_price,
|
infantPrice: body.infant_price,
|
||||||
|
infantDiscount: body.infant_discount,
|
||||||
itinerary: itineraryEntity,
|
itinerary: itineraryEntity,
|
||||||
updatedAt: new Date(),
|
updatedAt: new Date(),
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -173,9 +173,13 @@ export class PackageMapper {
|
|||||||
packageDetail.transportation,
|
packageDetail.transportation,
|
||||||
),
|
),
|
||||||
quad_price: packageDetail.quadPrice,
|
quad_price: packageDetail.quadPrice,
|
||||||
|
quad_discount: packageDetail.quadDiscount,
|
||||||
triple_price: packageDetail.triplePrice,
|
triple_price: packageDetail.triplePrice,
|
||||||
|
triple_discount: packageDetail.tripleDiscount,
|
||||||
double_price: packageDetail.doublePrice,
|
double_price: packageDetail.doublePrice,
|
||||||
|
double_discount: packageDetail.doubleDiscount,
|
||||||
infant_price: packageDetail.infantPrice,
|
infant_price: packageDetail.infantPrice,
|
||||||
|
infant_discount: packageDetail.infantDiscount,
|
||||||
itineraries,
|
itineraries,
|
||||||
created_at: packageDetail.createdAt,
|
created_at: packageDetail.createdAt,
|
||||||
updated_at: packageDetail.updatedAt,
|
updated_at: packageDetail.updatedAt,
|
||||||
|
|||||||
@@ -77,19 +77,36 @@ export const packageDetailRequestSchema = z.object({
|
|||||||
.number("Must be number.")
|
.number("Must be number.")
|
||||||
.int("Must be integer.")
|
.int("Must be integer.")
|
||||||
.positive("Must be positive."),
|
.positive("Must be positive."),
|
||||||
|
quad_discount: z
|
||||||
|
.number("Must be number.")
|
||||||
|
.int("Must be integer.")
|
||||||
|
.nonnegative("Must be non-negative."),
|
||||||
triple_price: z
|
triple_price: z
|
||||||
.number("Must be number.")
|
.number("Must be number.")
|
||||||
.int("Must be integer.")
|
.int("Must be integer.")
|
||||||
.positive("Must be positive."),
|
.positive("Must be positive."),
|
||||||
|
triple_discount: z
|
||||||
|
.number("Must be number.")
|
||||||
|
.int("Must be integer.")
|
||||||
|
.nonnegative("Must be non-negative."),
|
||||||
double_price: z
|
double_price: z
|
||||||
.number("Must be number.")
|
.number("Must be number.")
|
||||||
.int("Must be integer.")
|
.int("Must be integer.")
|
||||||
.positive("Must be positive."),
|
.positive("Must be positive."),
|
||||||
|
double_discount: z
|
||||||
|
.number("Must be number.")
|
||||||
|
.int("Must be integer.")
|
||||||
|
.nonnegative("Must be non-negative."),
|
||||||
infant_price: z
|
infant_price: z
|
||||||
.number("Must be number.")
|
.number("Must be number.")
|
||||||
.int("Must be integer.")
|
.int("Must be integer.")
|
||||||
.positive("Must be positive.")
|
.positive("Must be positive.")
|
||||||
.nullable(),
|
.nullable(),
|
||||||
|
infant_discount: z
|
||||||
|
.number("Must be number.")
|
||||||
|
.int("Must be integer.")
|
||||||
|
.nonnegative("Must be non-negative.")
|
||||||
|
.nullable(),
|
||||||
itineraries: z.array(
|
itineraries: z.array(
|
||||||
z.object(
|
z.object(
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -78,9 +78,13 @@ export type PackageDetailResponse = {
|
|||||||
madinah_hotel: HotelResponse;
|
madinah_hotel: HotelResponse;
|
||||||
transportation: TransportationClassResponse;
|
transportation: TransportationClassResponse;
|
||||||
quad_price: number;
|
quad_price: number;
|
||||||
|
quad_discount: number;
|
||||||
triple_price: number;
|
triple_price: number;
|
||||||
|
triple_discount: number;
|
||||||
double_price: number;
|
double_price: number;
|
||||||
|
double_discount: number;
|
||||||
infant_price: number | null;
|
infant_price: number | null;
|
||||||
|
infant_discount: number | null;
|
||||||
itineraries: PackageItineraryResponse[];
|
itineraries: PackageItineraryResponse[];
|
||||||
created_at: Date;
|
created_at: Date;
|
||||||
updated_at: Date;
|
updated_at: Date;
|
||||||
|
|||||||
Reference in New Issue
Block a user