91 lines
2.4 KiB
JavaScript
91 lines
2.4 KiB
JavaScript
const postgres = require("postgres");
|
|
|
|
const DEFAULT_DEPARTMENTS = [
|
|
[
|
|
"HR",
|
|
"Human Resources",
|
|
"People operations, recruitment, and employee relations.",
|
|
],
|
|
[
|
|
"QA",
|
|
"Quality Assurance",
|
|
"Quality systems, audits, and compliance oversight.",
|
|
],
|
|
["PRD", "Production", "Manufacturing, operations, and production planning."],
|
|
[
|
|
"ENG",
|
|
"Engineering",
|
|
"Technical development, maintenance, and process improvement.",
|
|
],
|
|
[
|
|
"LOG",
|
|
"Logistics",
|
|
"Warehouse, shipping, receiving, and inventory coordination.",
|
|
],
|
|
["FIN", "Finance", "Accounting, budgeting, and financial control."],
|
|
];
|
|
|
|
const DEFAULT_POSITIONS = [
|
|
["MGR", "Manager", "Leads team execution, planning, and performance."],
|
|
["SUP", "Supervisor", "Oversees day-to-day operations and frontline staff."],
|
|
[
|
|
"SNR",
|
|
"Senior Staff",
|
|
"Experienced individual contributor with advanced responsibility.",
|
|
],
|
|
[
|
|
"STF",
|
|
"Staff",
|
|
"Core contributor responsible for standard operational work.",
|
|
],
|
|
["JNR", "Junior Staff", "Entry-level contributor working under guidance."],
|
|
["TRN", "Trainee", "Newly onboarded employee in structured training period."],
|
|
];
|
|
|
|
async function main() {
|
|
const connectionString = requireEnv("DATABASE_URL");
|
|
|
|
if (!connectionString) {
|
|
throw new Error("DATABASE_URL is required");
|
|
}
|
|
|
|
const sql = postgres(connectionString, { prepare: false });
|
|
|
|
try {
|
|
const organizations = await sql`
|
|
select id, name
|
|
from organizations
|
|
order by created_at asc
|
|
`;
|
|
|
|
for (const organization of organizations) {
|
|
for (const [code, name, description] of DEFAULT_DEPARTMENTS) {
|
|
await sql`
|
|
insert into departments (organization_id, code, name, description)
|
|
values (${organization.id}, ${code}, ${name}, ${description})
|
|
on conflict (organization_id, name) do nothing
|
|
`;
|
|
}
|
|
|
|
for (const [code, name, description] of DEFAULT_POSITIONS) {
|
|
await sql`
|
|
insert into positions (organization_id, code, name, description)
|
|
values (${organization.id}, ${code}, ${name}, ${description})
|
|
on conflict (organization_id, name) do nothing
|
|
`;
|
|
}
|
|
}
|
|
|
|
console.log(
|
|
`Seeded master data for ${organizations.length} organization(s).`,
|
|
);
|
|
} finally {
|
|
await sql.end({ timeout: 1 });
|
|
}
|
|
}
|
|
|
|
main().catch((error) => {
|
|
console.error("Failed to seed master data.", error);
|
|
process.exitCode = 1;
|
|
});
|