This commit is contained in:
2025-08-07 15:06:30 +05:00
parent 26ad6a65f6
commit cfbc5214e3
6 changed files with 125 additions and 8 deletions
+14 -6
View File
@@ -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
+10 -2
View File
@@ -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)]
);
+20
View File
@@ -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'
}
+22
View File
@@ -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'
}
@@ -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'
}
@@ -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'
}
}