From cfbc5214e3e1aff3e586b4661ca44057f8ab78e5 Mon Sep 17 00:00:00 2001 From: Lanskikh Date: Thu, 7 Aug 2025 15:06:30 +0500 Subject: [PATCH] upd --- replicate.ts | 20 +++++++++----- src/db/schema/units.ts | 12 +++++++-- src/utils/getUnitSideDubaiMarina.ts | 20 ++++++++++++++ src/utils/getUnitSideMarasiDrive.ts | 22 +++++++++++++++ src/utils/getUnitTypeVariantDubaiMarina.ts | 28 +++++++++++++++++++ src/utils/getUnitTypeVariantMarasiDrive.ts | 31 ++++++++++++++++++++++ 6 files changed, 125 insertions(+), 8 deletions(-) create mode 100644 src/utils/getUnitSideDubaiMarina.ts create mode 100644 src/utils/getUnitSideMarasiDrive.ts create mode 100644 src/utils/getUnitTypeVariantDubaiMarina.ts create mode 100644 src/utils/getUnitTypeVariantMarasiDrive.ts diff --git a/replicate.ts b/replicate.ts index 44384a4..2986a45 100644 --- a/replicate.ts +++ b/replicate.ts @@ -1,6 +1,10 @@ import { db } from "./src/db/index"; import { IUnit } from "./src/types/IUnit"; import { unitsTable } from "./src/db/schema/units"; +import { getUnitTypeVariantMarasiDrive } from "./src/utils/getUnitTypeVariantMarasiDrive"; +import { getUnitTypeVariantDubaiMarina } from "./src/utils/getUnitTypeVariantDubaiMarina"; +import { getUnitSideMarasiDrive } from "./src/utils/getUnitSideMarasiDrive"; +import { getUnitSideDubaiMarina } from "./src/utils/getUnitSideDubaiMarina"; import got from "got"; const { units: unitsOfMarasiDrive } = await got @@ -31,7 +35,7 @@ for (const { unit_type_variant, unit_view, balcony_area, -} of unitsOfDubaiMarina) { +} of unitsOfDubaiMarina.concat(unitsOfMarasiDrive)) { type Unit = typeof unitsTable.$inferInsert; let parts: string[]; @@ -53,18 +57,22 @@ for (const { parts.length === 1 ? +parts[0] : !Number.isNaN(+parts[0]) - ? +parts[0] - : +parts[1], + ? +parts[0] + : +parts[1], project, + projectSlug: project === "Rove Home Marasi Drive" ? "marasi-drive" : "dubai-marina", floor: +floor, noOfBathrooms: no_of_bathrooms, noOfParkingSpace: no_of_parking_space, salesPrice: sales_price, - state: state as Unit["state"], + state: state !== "available" ? "unavailable" : state, unitType: unit_type ? (unit_type as Unit["unitType"]) : null, unitTypeVariant: unit_type_variant ? (unit_type_variant as Unit["unitTypeVariant"]) : null, + unitTypeVariantSlug: project === "Rove Home Marasi Drive" ? getUnitTypeVariantMarasiDrive(unit_no) : getUnitTypeVariantDubaiMarina(unit_no), + isLoft: project === "Rove Home Dubai Marina" && +floor > 38, + side: project === "Rove Home Marasi Drive" ? getUnitSideMarasiDrive(unit_no) : getUnitSideDubaiMarina(unit_no), unitView: unit_view ? (unit_view as Unit["unitView"]) : null, suitsArea: suits_area, squareFt: square_ft, @@ -72,8 +80,8 @@ for (const { wing: unit_no.startsWith("E") ? "East" : unit_no.startsWith("W") - ? "West" - : null, + ? "West" + : null, }; await db diff --git a/src/db/schema/units.ts b/src/db/schema/units.ts index 0289902..f8ab618 100644 --- a/src/db/schema/units.ts +++ b/src/db/schema/units.ts @@ -1,4 +1,4 @@ -import { unique } from "drizzle-orm/pg-core"; +import { boolean, unique } from "drizzle-orm/pg-core"; import { doublePrecision } from "drizzle-orm/pg-core"; import { integer, pgTable, uuid, varchar } from "drizzle-orm/pg-core"; @@ -9,6 +9,7 @@ export const unitsTable = pgTable( unitNo: varchar("unit_no", { length: 10 }).notNull(), number: integer("number"), project: varchar("project", { length: 256 }).notNull(), + projectSlug: varchar("project_slug", { length: 256 }), floor: integer("floor").notNull(), unitType: varchar("unit_type", { length: 256, @@ -20,18 +21,25 @@ export const unitsTable = pgTable( unitTypeVariant: varchar("unit_type_variant", { length: 256, }), + unitTypeVariantSlug: varchar("unit_type_variant_slug", { + length: 256, + }), suitsArea: doublePrecision("suits_area").notNull(), squareFt: doublePrecision("square_ft").notNull(), noOfParkingSpace: integer("no_of_parking_space").notNull(), salesPrice: integer("sales_price").notNull(), state: varchar("state", { length: 256, - enum: ["reserved", "sold_spa", "available", "sold_registered"], + enum: ["reserved", "sold_spa", "available", "sold_registered", "unavailable"], }).notNull(), balconyArea: doublePrecision("balcony_area").notNull(), wing: varchar("wing", { enum: ["East", "West"], }), + side: varchar("side", { + enum: ["left", "right"], + }), + isLoft: boolean("is_loft").default(false), }, (t) => [unique().on(t.project, t.unitNo)] ); diff --git a/src/utils/getUnitSideDubaiMarina.ts b/src/utils/getUnitSideDubaiMarina.ts new file mode 100644 index 0000000..cf9f603 --- /dev/null +++ b/src/utils/getUnitSideDubaiMarina.ts @@ -0,0 +1,20 @@ +export function getUnitSideDubaiMarina( + unitNumber: string, +) { + const isCombinable = unitNumber.endsWith('C') + const formattedUnitNumber = isCombinable ? +unitNumber.slice(-4, -2) : +unitNumber.slice(-2); + const floor = +unitNumber.slice(0, 2); + + if (floor > 38) { + if ([1, 2, 3, 5, 8, 9, 11].includes(formattedUnitNumber)) return 'right' + return 'left' + } + + if (isCombinable) { + if ([2, 5, 8, 10, 11].includes(formattedUnitNumber)) return 'left' + return 'right' + } + + if ([3, 4, 5, 6, 7, 8, 9, 10, 11, 21].includes(formattedUnitNumber)) return 'right' + return 'left' +} \ No newline at end of file diff --git a/src/utils/getUnitSideMarasiDrive.ts b/src/utils/getUnitSideMarasiDrive.ts new file mode 100644 index 0000000..38fe7c9 --- /dev/null +++ b/src/utils/getUnitSideMarasiDrive.ts @@ -0,0 +1,22 @@ +export function getUnitSideMarasiDrive( + unitNumber: string +) { + const floor = +unitNumber.slice(2, -2); + const wing = unitNumber[0] === 'W' ? 'West' : 'East' + const formattedUnitNumber = +unitNumber.slice(-2); + + if (wing === "West") { + if (floor >= 5 && floor <= 21) { + if ([3, 4, 9, 10, 11, 12, 13, 14, 16].includes(formattedUnitNumber)) return 'right' + else if (formattedUnitNumber === 17) return null; + return 'left' + } + if (floor >= 24 && floor <= 31) { + if ([1, 3, 4, 7, 9, 10, 14].includes(formattedUnitNumber)) return 'right' + return 'left' + } + return 'left' + } + if ([3, 4, 7, 8, 10, 11, 13, 16].includes(formattedUnitNumber)) return 'left' + return 'right' +} diff --git a/src/utils/getUnitTypeVariantDubaiMarina.ts b/src/utils/getUnitTypeVariantDubaiMarina.ts new file mode 100644 index 0000000..f369b48 --- /dev/null +++ b/src/utils/getUnitTypeVariantDubaiMarina.ts @@ -0,0 +1,28 @@ +export function getUnitTypeVariantDubaiMarina( + unitNumber: string, +): string { + const isCombinable = unitNumber.endsWith('C') + const formattedUnitNumber = isCombinable ? +unitNumber.slice(-4, -2) : +unitNumber.slice(-2); + const floor = +unitNumber.slice(0, isCombinable ? -4 : -2); + + if (floor > 38) { + if ([1, 7, 8, 14].includes(formattedUnitNumber)) return '1-bedroom-loft-c' + if ([2, 6, 9, 13].includes(formattedUnitNumber)) return '1-bedroom-loft-b' + if ([3, 5, 10, 12].includes(formattedUnitNumber)) return '2-bedroom-loft' + return '1-bedroom-loft-a' + } + + if (isCombinable) { + if ([6, 17].includes(formattedUnitNumber)) return '1-bedroom-a' + if ([2, 10, 13, 21].includes(formattedUnitNumber)) return '2-bedroom-a' + if ([5, 8, 15, 18].includes(formattedUnitNumber)) return '1-bedroom-c' + if (formattedUnitNumber === 1) return '1-bedroom-d' + return '1-bedroom-b' + } + + if ([4, 5, 7, 8, 15, 16, 18, 19].includes(formattedUnitNumber)) return 'studio-2-a' + if ([2, 10, 13, 21].includes(formattedUnitNumber)) return 'studio-2-b' + if ([11, 12].includes(formattedUnitNumber)) return 'studio-2-c' + if ([3, 6, 9, 14, 17, 20].includes(formattedUnitNumber)) return '1-bedroom-a' + return '1-bedroom-b' +} \ No newline at end of file diff --git a/src/utils/getUnitTypeVariantMarasiDrive.ts b/src/utils/getUnitTypeVariantMarasiDrive.ts new file mode 100644 index 0000000..351a42d --- /dev/null +++ b/src/utils/getUnitTypeVariantMarasiDrive.ts @@ -0,0 +1,31 @@ +export function getUnitTypeVariantMarasiDrive(unitNumber: string): string { + const floor = +unitNumber.slice(2, -2); + const wing = unitNumber[0] === 'W' ? 'West' : 'East' + const formattedUnitNumber = +unitNumber.slice(-2) + + if (wing === "West") { + if (floor >= 5 && floor <= 21) { + if ([9, 10, 11, 12, 13, 14].includes(formattedUnitNumber)) return 'studio-flex' + if ([2, 4, 5].includes(formattedUnitNumber)) return 'studio-2' + if ([7, 8].includes(formattedUnitNumber)) return '1-bedroom-a' + if ([3, 6].includes(formattedUnitNumber)) return '1-bedroom-d' + if (formattedUnitNumber === 1) return '2-bedroom-a' + if (formattedUnitNumber === 17) return '2-bedroom-b' + return '1-bedroom-c' + } + if (floor >= 24 && floor <= 31) { + if ([2, 4, 5, 10, 11].includes(formattedUnitNumber)) return 'studio-2' + if ([7, 8].includes(formattedUnitNumber)) return '1-bedroom-a' + if (formattedUnitNumber === 15) return '2-bedroom-b' + if ([3, 6, 9, 12].includes(formattedUnitNumber)) return '1-bedroom-d' + return '1-bedroom-c' + } + return '2-bedroom-a' + } else { + if ([2, 4, 5, 11, 12, 13, 14].includes(formattedUnitNumber)) return 'studio-2' + if ([8, 9].includes(formattedUnitNumber)) return '1-bedroom-b' + if ([6, 7, 10, 15, 16].includes(formattedUnitNumber)) return '1-bedroom-c' + if (formattedUnitNumber === 3) return '1-bedroom-d' + return '2-bedroom-a' + } +} \ No newline at end of file