Files
irth-backend/replicate.ts
T
2025-08-07 15:06:30 +05:00

95 lines
2.9 KiB
TypeScript

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
.get(
// "https://irth-test-ii-16348121.dev.odoo.com/3d-fields/1?token=f82a4708-9a4d-491a-9424-1580b7173ba6"
"https://irth.odoo.com/3d-fields/50?token=f82a4708-9a4d-491a-9424-1580b7173ba6"
)
.json<{ units: IUnit[] }>();
const { units: unitsOfDubaiMarina } = await got
.get(
// "https://irth-test-ii-16348121.dev.odoo.com/3d-fields/7?token=f82a4708-9a4d-491a-9424-1580b7173ba6"
"https://irth.odoo.com/3d-fields/1?token=f82a4708-9a4d-491a-9424-1580b7173ba6"
)
.json<{ units: IUnit[] }>();
for (const {
no_of_bathrooms,
floor,
no_of_parking_space,
project,
sales_price,
square_ft,
state,
suits_area,
unit_no,
unit_type,
unit_type_variant,
unit_view,
balcony_area,
} of unitsOfDubaiMarina.concat(unitsOfMarasiDrive)) {
type Unit = typeof unitsTable.$inferInsert;
let parts: string[];
if (unit_no.includes("Retail")) {
continue;
}
try {
parts = unit_no.split("-");
} catch (error) {
console.log(unit_no);
continue;
}
const unit: Unit = {
unitNo: unit_no,
number:
parts.length === 1
? +parts[0]
: !Number.isNaN(+parts[0])
? +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 !== "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,
balconyArea: balcony_area,
wing: unit_no.startsWith("E")
? "East"
: unit_no.startsWith("W")
? "West"
: null,
};
await db
.insert(unitsTable)
.values(unit)
.onConflictDoUpdate({
target: [unitsTable.project, unitsTable.unitNo],
set: unit,
});
}