[offers][chore] Set job title in seeding

pull/501/head
Bryann Yeap Kok Keong 3 years ago committed by Stuart Long Chay Boon
parent 5f0e5b3d54
commit ac9e0293bd

@ -4,7 +4,10 @@ import crypto from 'crypto';
import { baseCurrencyString } from '../src/utils/offers/currency'; import { baseCurrencyString } from '../src/utils/offers/currency';
import { convert } from '../src/utils/offers/currency/currencyExchange'; import { convert } from '../src/utils/offers/currency/currencyExchange';
import { generateAnalysis } from '../src/utils/offers/analysisGeneration'; import { generateAnalysis } from '../src/utils/offers/analysisGeneration';
import generateRandomName from '../src/utils/offers/randomNameGenerator'; import {
generateRandomName,
generateRandomStringForToken,
} from '../src/utils/offers/randomGenerator';
const prisma = new PrismaClient(); const prisma = new PrismaClient();
@ -45,6 +48,35 @@ function generateSpecialization() {
return specializations[Math.floor(Math.random() * 300) % 3]; return specializations[Math.floor(Math.random() * 300) % 3];
} }
const getJobTitle = (role: string) => {
const processedRole = role.toUpperCase().trim();
if (processedRole.includes('ML ENGINEER')) {
return 'ai-ml-engineer';
} else if (processedRole.includes('BACKEND')) {
return 'back-end-engineer';
} else if (processedRole.includes('DATA')) {
return 'data-engineer';
} else if (processedRole.includes('DEVOPS')) {
return 'devops-engineer';
} else if (processedRole.includes('ENTERPRISE')) {
return 'enterprise-engineer';
} else if (processedRole.includes('RESEARCH')) {
return 'research-engineer';
} else if (
processedRole.includes('CYBER') ||
processedRole.includes('SECURITY')
) {
return 'security-engineer';
} else if (processedRole.includes('QA')) {
return 'test-engineer';
} else if (processedRole.includes('SYSTEM')) {
return 'systems-engineer';
} else {
return 'software-engineer'; // Assume default SWE
}
};
const createdProfileIds: Array<string> = []; const createdProfileIds: Array<string> = [];
const seedSalaries = async () => { const seedSalaries = async () => {
@ -58,190 +90,191 @@ const seedSalaries = async () => {
//seed here //seed here
return await Promise.all( return await Promise.all(
data.map(async (data: ExcelData) => { data.map(async (data: ExcelData) => {
// only add swe roles
if (data.Role.toUpperCase() === 'SOFTWARE ENGINEER') {
if (data.Income && typeof data.Income === 'number') {
// check if we have company id
// console.log(data.Income)
// console.log()
if (companyIdMappings[data.Company]) {
const token = crypto
.createHash('sha256')
.update(xlSerialToJsDate(data.Timestamp).toString())
.digest('hex');
// Generate random name until unique if (data.Income && typeof data.Income === 'number') {
let uniqueName: string = await generateRandomName(); // Generate random name until unique
let uniqueName: string = await generateRandomName();
if (data.Type.toUpperCase() === 'INTERNSHIP') { const jobTitle = getJobTitle(data.Role);
// create profile
const dataAdded = await prisma.offersProfile.create({ // check if we have company id
data: { if (companyIdMappings[data.Company]) {
profileName: uniqueName, const token = crypto
createdAt: xlSerialToJsDate(data.Timestamp), .createHash('sha256')
editToken: token, .update(
background: { xlSerialToJsDate(data.Timestamp).toString() +
create: { generateRandomStringForToken(),
totalYoe: 0, )
}, .digest('hex');
if (data.Type.toUpperCase() === 'INTERNSHIP') {
// create profile
const dataAdded = await prisma.offersProfile.create({
data: {
profileName: uniqueName,
createdAt: xlSerialToJsDate(data.Timestamp),
editToken: token,
background: {
create: {
totalYoe: 0,
}, },
offers: { },
create: { offers: {
comments: data.Comments ?? '', create: {
company: { comments: data.Comments ?? '',
connect: { company: {
id: companyIdMappings[data.Company], connect: {
}, id: companyIdMappings[data.Company],
}, },
jobType: 'INTERN', },
location: 'Singapore, Singapore', // TODO: DEFAULT AS SG jobType: 'INTERN',
monthYearReceived: xlSerialToJsDate(data.Timestamp), location: 'Singapore, Singapore', // TODO: DEFAULT AS SG
negotiationStrategy: '', monthYearReceived: xlSerialToJsDate(data.Timestamp),
offersIntern: { negotiationStrategy: '',
create: { offersIntern: {
internshipCycle: 'Summer', create: {
monthlySalary: { internshipCycle: 'Summer',
create: { monthlySalary: {
baseCurrency: baseCurrencyString, create: {
baseValue: await convert( baseCurrency: baseCurrencyString,
data.Income, baseValue: await convert(
'SGD', // assume sgd data.Income,
baseCurrencyString, 'SGD', // assume sgd
), baseCurrencyString,
currency: 'SGD', // assume sgd ),
value: data.Income, currency: 'SGD', // assume sgd
}, value: data.Income,
}, },
specialization: generateSpecialization(), // TODO: check about this
startYear: xlSerialToJsDate(
data.Timestamp,
).getFullYear(),
title: data.Role, // TODO: check about this
}, },
specialization: generateSpecialization(), // TODO: check about this
startYear: xlSerialToJsDate(
data.Timestamp,
).getFullYear(),
title: jobTitle,
}, },
}, },
}, },
}, },
}); },
});
console.log('Profile created:', dataAdded.id); console.log('Profile created:', dataAdded.id);
createdProfileIds.push(dataAdded.id); createdProfileIds.push(dataAdded.id);
} else { } else {
// assume rest full time // assume rest full time
const dataAdded = await prisma.offersProfile.create({ const dataAdded = await prisma.offersProfile.create({
data: { data: {
profileName: crypto.randomUUID().substring(0, 10), profileName: uniqueName,
createdAt: xlSerialToJsDate(data.Timestamp), createdAt: xlSerialToJsDate(data.Timestamp),
editToken: token, editToken: token,
background: { background: {
create: { create: {
totalYoe: 0, totalYoe: 0,
},
}, },
offers: { },
create: { offers: {
comments: data.Comments ?? '', create: {
company: { comments: data.Comments ?? '',
connect: { company: {
id: companyIdMappings[data.Company], connect: {
}, id: companyIdMappings[data.Company],
}, },
jobType: 'FULLTIME', },
location: 'Singapore, Singapore', // TODO: DEFAULT AS SG jobType: 'FULLTIME',
monthYearReceived: xlSerialToJsDate(data.Timestamp), location: 'Singapore, Singapore', // TODO: DEFAULT AS SG
negotiationStrategy: '', monthYearReceived: xlSerialToJsDate(data.Timestamp),
offersFullTime: { negotiationStrategy: '',
create: { offersFullTime: {
baseSalary: { create: {
create: { baseSalary: {
baseCurrency: baseCurrencyString, create: {
baseValue: await convert( baseCurrency: baseCurrencyString,
data.Income, baseValue: await convert(
'SGD', // assume sgd data.Income,
baseCurrencyString, 'SGD', // assume sgd
), baseCurrencyString,
currency: 'SGD', // assume sgd ),
value: data.Income, currency: 'SGD', // assume sgd
}, value: data.Income,
}, },
bonus: { },
create: { bonus: {
baseCurrency: baseCurrencyString, create: {
baseValue: await convert( baseCurrency: baseCurrencyString,
data.Bonus baseValue: await convert(
? typeof data.Bonus === 'number' data.Bonus
? data.Bonus
: 0
: 0,
'SGD',
baseCurrencyString,
),
currency: 'SGD',
value: data.Bonus
? typeof data.Bonus === 'number' ? typeof data.Bonus === 'number'
? data.Bonus ? data.Bonus
: 0 : 0
: 0, : 0,
}, 'SGD',
baseCurrencyString,
),
currency: 'SGD',
value: data.Bonus
? typeof data.Bonus === 'number'
? data.Bonus
: 0
: 0,
}, },
level: data.Type, },
specialization: generateSpecialization(), // TODO: check about this level: data.Type,
stocks: { specialization: generateSpecialization(), // TODO: check about this
create: { stocks: {
baseCurrency: baseCurrencyString, create: {
baseValue: await convert( baseCurrency: baseCurrencyString,
data.Stocks baseValue: await convert(
? typeof data.Stocks === 'number' data.Stocks
? data.Stocks
: 0
: 0,
'SGD',
baseCurrencyString,
),
currency: 'SGD',
value: data.Stocks
? typeof data.Stocks === 'number' ? typeof data.Stocks === 'number'
? data.Stocks ? data.Stocks
: 0 : 0
: 0, : 0,
}, 'SGD',
baseCurrencyString,
),
currency: 'SGD',
value: data.Stocks
? typeof data.Stocks === 'number'
? data.Stocks
: 0
: 0,
}, },
title: data.Role, // TODO: check about this },
totalCompensation: { title: jobTitle,
create: { totalCompensation: {
baseCurrency: baseCurrencyString, create: {
baseValue: await convert( baseCurrency: baseCurrencyString,
data.TC baseValue: await convert(
? typeof data.TC === 'number' data.TC
? data.TC
: 0
: 0,
'SGD',
baseCurrencyString,
),
currency: 'SGD',
value: data.TC
? typeof data.TC === 'number' ? typeof data.TC === 'number'
? data.TC ? data.TC
: 0 : 0
: 0, : 0,
}, 'SGD',
baseCurrencyString,
),
currency: 'SGD',
value: data.TC
? typeof data.TC === 'number'
? data.TC
: 0
: 0,
}, },
}, },
}, },
}, },
}, },
}, },
}); },
console.log('Profile created:', dataAdded.id); });
createdProfileIds.push(dataAdded.id); console.log('Profile created:', dataAdded.id);
} createdProfileIds.push(dataAdded.id);
} else {
console.log('Invalid Company: ' + data.Company);
} }
} else { } else {
console.log('Invalid Income not a number: ' + data.Income); console.log('Invalid Company: ' + data.Company);
} }
} else {
console.log('Invalid Income not a number: ' + data.Income);
} }
}), }),
); );
@ -250,7 +283,7 @@ const seedSalaries = async () => {
const generateAllAnalysis = async () => { const generateAllAnalysis = async () => {
return await Promise.all( return await Promise.all(
createdProfileIds.map(async (profileId) => { createdProfileIds.map(async (profileId) => {
const analysis = await generateAnalysis({ await generateAnalysis({
ctx: { prisma, session: null }, ctx: { prisma, session: null },
input: { profileId }, input: { profileId },
}); });

Loading…
Cancel
Save