Skip to content

Instantly share code, notes, and snippets.

@3gcodes
Created August 25, 2020 21:09
Show Gist options
  • Save 3gcodes/e0d978f9dbe8cefbcc71e6dd28fc191e to your computer and use it in GitHub Desktop.
Save 3gcodes/e0d978f9dbe8cefbcc71e6dd28fc191e to your computer and use it in GitHub Desktop.
const fs = require('fs');
const { Pool } = require('pg');
const neo4j = require('neo4j-driver');
const { v4: uuidv4 } = require('uuid');
const env = process.env.NODE_ENV || 'development';
const config = require('./config/config.json')[env];
const driver = neo4j.driver(config.neo4j, neo4j.auth.basic(config.username, config.password));
const pool = new Pool({
user: 'postgres',
password: 'postgres',
database: 'balanced_comp_development',
host: 'localhost',
port: 5432
});
pool.on('error', (err, client) => {
console.error('Unexpected error on idle client', err);
process.exit(-1);
});
;(async () => {
const client = await pool.connect();
const companyResults = await client.query('select * from companies');
companyResults.rows.forEach(async company => {
const comp = await saveCompany(company);
const empployeeResults = await client.query('select * from employees where company_id = $1 limit 5', [company.id]);
//client.release();
//await pool.end();
empployeeResults.rows.forEach(employee => {
saveEmployee(employee, company);
console.log('yep, done');
});
});
})();
async function saveEmployee(employee, company) {
const session = driver.session();
const id = uuidv4();
const createdAt = employee.created_at;
const updatedAt = employee.updated_at;
const result = await session.run(
`CREATE (e:Employee {
id: "${id}",
pg_id: ${employee.id},
internalId: ${employee.internal_id},
email: "${employee.email}",
firstName: "${employee.first_name}",
lastName: "${employee.last_name}",
middleInitial: "${employee.middle_initial}",
currentSalary: ${employee.current_salary},
createdAt: datetime(${JSON.stringify(employee.created_at)}),
updatedAt: datetime(${JSON.stringify(employee.updated_at)}),
eeocCode: "${employee.eeoc_code}",
dateInPosition: datetime(${JSON.stringify(employee.date_in_position)}),
supervisor: ${employee.supervisor},
status: "${employee.full_time_or_part_time}",
averageWeeklyHours: ${employee.average_weekly_hours},
performanceLevel: ${employee.performance_level},
flagged: ${employee.flagged},
hireDate: datetime(${JSON.stringify(employee.hire_date)}),
directSubordinatesCount: ${employee.direct_subordinates_count},
deletedAt: datetime(${JSON.stringify(employee.deleted_at)}),
type: "${employee.type}",
variablePayTargetedDollars: ${employee.variable_pay_targeted_dollars},
variablePayActualDollars: ${employee.variable_pay_actual_dollars},
archivedMeta: ${employee.archived_meta},
archived: ${employee.archived},
terminationDate: datetime(${JSON.stringify(employee.termination_date)}),
reasonForLeaving: "${employee.reason_for_leaving}",
gender: "${employee.gender}"
})
WITH e
MATCH (c:Company {pg_id: ${company.id}})
CREATE (e)-[r:works_at]->(c)
CREATE (c)-[:employs]->(e)
`
);
console.log('saved employee to neo');
//return result.records[0];
}
async function saveCompany(company) {
const session = driver.session();
const id = uuidv4();
const result = await session.run(
`CREATE (c:Company {
id: "${id}",
pg_id: ${company.id},
createdAt: datetime(${JSON.stringify(company.created_at)}),
updatedAt: datetime(${JSON.stringify(company.updated_at)}),
name: "${company.name}"
}) RETURN c`
);
console.log('saved company to neo');
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment