import pkg from 'pg'; const { Pool } = pkg; import fsextra from 'fs-extra'; const { fstat, readFileSync, writeJsonSync } = fsextra; import { v4 as uuidv4 } from 'uuid'; import { CommercialPropertyListing, User } from '../common-models/src/main.model'; // PostgreSQL Verbindungskonfiguration const pool = new Pool({ user: 'bizmatch', host: 'localhost', database: 'bizmatch', password: 'xieng7Seih', port: 5432, }); // Typdefinition für das JSON-Objekt interface BusinessListing { userId?: string; listingsCategory: string; title: string; description: string; type: string; state: string; city: string; id: string; price: number; salesRevenue: number; leasedLocation: boolean; established: number; employees: number; reasonForSale: string; supportAndTraining: string; cashFlow: number; brokerLicencing: string; internalListingNumber: number; realEstateIncluded: boolean; franchiseResale: boolean; draft: boolean; internals: string; created: Date; } async function importBusinesses() { const filePath = './data/businesses.json' const data: string = readFileSync(filePath, 'utf8'); const jsonData: BusinessListing[]|any = JSON.parse(data); // Erwartet ein Array von Objekten await pool.query('drop table if exists businesses'); await pool.query(`CREATE TABLE businesses ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), created TIMESTAMP, updated TIMESTAMP, visits INTEGER, last_visit TIMESTAMP, data jsonb );`); for (const listing of jsonData) { const created = listing.created delete listing.created; delete listing.id; delete listing.temporary const json_values = [ created, new Date(), 0, null, listing ] await pool.query('INSERT INTO businesses (created, updated, visits, last_visit, data) VALUES ($1,$2,$3,$4,$5)', json_values); } console.log('All data imported successfully.'); } async function importUser() { const filePath = './data/broker.json' const data: string = readFileSync(filePath, 'utf8'); const jsonData: User[] = JSON.parse(data); // Erwartet ein Array von Objekten await pool.query('drop table if exists users'); await pool.query(`CREATE TABLE users ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), created TIMESTAMP, updated TIMESTAMP, visits INTEGER, last_visit TIMESTAMP, data jsonb );`); for (const user of jsonData) { delete user.id; user.hasCompanyLogo=false; user.hasProfile=false; const json_values = [ getRandomDateLastYear(), new Date(), 0, null, user ] await pool.query('INSERT INTO users (created, updated, visits, last_visit, data) VALUES ($1,$2,$3,$4,$5)', json_values); } console.log('All data imported successfully.'); } async function importCommercials() { const filePath = './data/commercials.json' const data: string = readFileSync(filePath, 'utf8'); const jsonData: CommercialPropertyListing[]|any = JSON.parse(data); // Erwartet ein Array von Objekten await pool.query('drop table if exists commercials'); await pool.query(`CREATE TABLE commercials ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), created TIMESTAMP, updated TIMESTAMP, visits INTEGER, last_visit TIMESTAMP, data jsonb );`); for (const commercial of jsonData) { commercial.hasImages=false; commercial.imagePath=commercial.id; delete commercial.id; delete commercial.temporary; const json_values = [ getRandomDateLastYear(), new Date(), 0, null, commercial ] await pool.query('INSERT INTO commercials (created, updated, visits, last_visit, data) VALUES ($1,$2,$3,$4,$5)', json_values); } console.log('All data imported successfully.'); } function idUpdate(jsonData) { const out: BusinessListing[] = [] for (const listing of jsonData) { const uuid = uuidv4(); listing.id = uuid; out.push(listing); } writeJsonSync('./data/businesses_.json', out); console.log('All data updated sucessfully.'); } function getRandomDateLastYear(): Date { const today = new Date(); const lastYear = new Date(today.getFullYear() - 1, today.getMonth(), today.getDate()); // Generiere eine zufällige Zahl zwischen 0 und der Anzahl der Millisekunden in einem Jahr const randomTime = Math.random() * (today.getTime() - lastYear.getTime()); // Erstelle ein neues Datum basierend auf dieser zufälligen Zeit const randomDate = new Date(lastYear.getTime() + randomTime); return randomDate; } // Passen Sie den Dateipfad an Ihre spezifischen Bedürfnisse an try { await importBusinesses(); await importUser(); await importCommercials(); } catch (err) { console.error('Error importing data:', err.message); } finally { // Schließen der Verbindung zum Pool await pool.end(); }