74 lines
2.6 KiB
TypeScript
74 lines
2.6 KiB
TypeScript
import 'dotenv/config';
|
|
import { drizzle } from 'drizzle-orm/node-postgres';
|
|
import pkg from 'pg';
|
|
const { Pool } = pkg;
|
|
import * as schema from './schema.js';
|
|
import { readFileSync } from 'fs';
|
|
import { BusinessListing, CommercialPropertyListing, User } from 'src/models/db.model.js';
|
|
|
|
|
|
const connectionString = process.env.DATABASE_URL
|
|
// const pool = new Pool({connectionString})
|
|
const client = new Pool({ connectionString })
|
|
const db = drizzle(client, { schema, logger: true });
|
|
|
|
//Delete Content
|
|
await db.delete(schema.commercials);
|
|
await db.delete(schema.businesses);
|
|
await db.delete(schema.users);
|
|
|
|
//Broker
|
|
let filePath = `./data/broker.json`
|
|
let data: string = readFileSync(filePath, 'utf8');
|
|
const userData: User[] = JSON.parse(data); // Erwartet ein Array von Objekten
|
|
const generatedUserData = []
|
|
console.log(userData.length)
|
|
for (const user of userData) {
|
|
delete user.id
|
|
const u = await db.insert(schema.users).values(user).returning({ insertedId: schema.users.id });
|
|
// console.log(`--> ${u[0].insertedId}`)
|
|
generatedUserData.push(u[0].insertedId);
|
|
}
|
|
//Business Listings
|
|
filePath = `./data/businesses.json`
|
|
data = readFileSync(filePath, 'utf8');
|
|
const businessJsonData = JSON.parse(data) as BusinessListing[]; // Erwartet ein Array von Objekten
|
|
|
|
for (const business of businessJsonData) {
|
|
delete business.id
|
|
business.created = new Date(business.created)
|
|
business.userId = getRandomItem(generatedUserData);
|
|
await db.insert(schema.businesses).values(business);
|
|
}
|
|
//Corporate Listings
|
|
filePath = `./data/commercials.json`
|
|
data = readFileSync(filePath, 'utf8');
|
|
const commercialJsonData = JSON.parse(data) as CommercialPropertyListing[]; // Erwartet ein Array von Objekten
|
|
for (const commercial of commercialJsonData) {
|
|
delete commercial.id
|
|
commercial.created = getRandomDateWithinLastYear();
|
|
commercial.userId = getRandomItem(generatedUserData);
|
|
await db.insert(schema.commercials).values(commercial);
|
|
}
|
|
|
|
//End
|
|
await client.end()
|
|
|
|
function getRandomItem<T>(arr: T[]): T {
|
|
if (arr.length === 0) {
|
|
throw new Error('The array is empty.');
|
|
}
|
|
|
|
const randomIndex = Math.floor(Math.random() * arr.length);
|
|
return arr[randomIndex];
|
|
}
|
|
function getRandomDateWithinLastYear(): Date {
|
|
const currentDate = new Date();
|
|
const lastYear = new Date(currentDate.getFullYear() - 1, currentDate.getMonth(), currentDate.getDate());
|
|
|
|
const timeDiff = currentDate.getTime() - lastYear.getTime();
|
|
const randomTimeDiff = Math.random() * timeDiff;
|
|
const randomDate = new Date(lastYear.getTime() + randomTimeDiff);
|
|
|
|
return randomDate;
|
|
} |