65 lines
2.5 KiB
JavaScript
65 lines
2.5 KiB
JavaScript
#!/usr/bin/env node
|
|
/**
|
|
* ax_assignments INSERT 직접 테스트 (배열 SQL 리터럴 방식)
|
|
*/
|
|
require("dotenv").config({ path: require("path").join(__dirname, "..", ".env") });
|
|
const { Pool } = require("pg");
|
|
const { v4: uuidv4 } = require("uuid");
|
|
|
|
const pool = new Pool({
|
|
host: process.env.DB_HOST,
|
|
port: Number(process.env.DB_PORT || 5432),
|
|
database: process.env.DB_DATABASE,
|
|
user: process.env.DB_USERNAME,
|
|
password: process.env.DB_PASSWORD,
|
|
});
|
|
|
|
async function main() {
|
|
const id = uuidv4();
|
|
const now = new Date();
|
|
|
|
const toArrayLiteralSafe = (v) => {
|
|
if (v === "" || typeof v === "string" || v == null) return "'{}'";
|
|
const arr = Array.isArray(v) ? v.filter((x) => typeof x === "string") : [];
|
|
if (arr.length === 0) return "'{}'";
|
|
const escaped = arr.map((s) => `"${String(s).replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"`);
|
|
return `'{${escaped.join(",")}}'`;
|
|
};
|
|
|
|
const dataTypesLit = "'{}'";
|
|
const qualitativeLit = "'{}'";
|
|
const techStackLit = "'{}'";
|
|
const risksLit = "'{}'";
|
|
|
|
const sql = `INSERT INTO ax_assignments (
|
|
id, department, name, employee_id, position, phone, email,
|
|
work_process_description, pain_point, current_time_spent, error_rate_before,
|
|
collaboration_depts, reason_to_solve, ai_expectation, output_type, automation_level,
|
|
data_readiness, data_location, personal_info, data_quality, data_count, data_types,
|
|
time_reduction, error_reduction, volume_increase, cost_reduction, response_time,
|
|
other_metrics, annual_savings, labor_replacement, revenue_increase, other_effects,
|
|
qualitative_effects, tech_stack, risks, risk_detail, participation_pledge, status,
|
|
created_at, updated_at
|
|
) VALUES (
|
|
$1::uuid, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16,
|
|
$17, $18, $19, $20, $21, ${dataTypesLit}::text[], $22, $23, $24, $25, $26, $27, $28, $29, $30,
|
|
$31, ${qualitativeLit}::text[], ${techStackLit}::text[], ${risksLit}::text[], $32, $33, $34, $35, $36
|
|
)`;
|
|
|
|
const params = [
|
|
... [id, "테스트부서", "홍길동", "", "", "", "", "테스트", "테스트", "30분", "5%", "", "테스트", "테스트", "테스트", "", "", "", "", "", "" ],
|
|
... [ "", "", "", "", "", "", "", "", "", "" ],
|
|
... [ "", false, "신청", now, now ],
|
|
];
|
|
|
|
console.log("SQL preview:", sql.substring(200, 400));
|
|
const res = await pool.query(sql, params);
|
|
console.log("OK, inserted:", id);
|
|
await pool.end();
|
|
}
|
|
|
|
main().catch((e) => {
|
|
console.error("Error:", e.message);
|
|
process.exit(1);
|
|
});
|