30 lines
2.0 KiB
JavaScript
30 lines
2.0 KiB
JavaScript
import { execFile } from 'node:child_process';
|
|
import { promisify } from 'node:util';
|
|
import { validateMariaDbBrowserConnection } from '../../../../../job-tracker-ui/scripts/mariadb-browser-connection.mjs';
|
|
|
|
const execute = promisify(execFile);
|
|
export async function sql(query) {
|
|
const port = process.env.JOBTRACKER_MARIADB_BROWSER_PORT;
|
|
const database = validateMariaDbBrowserConnection(process.env.JOBTRACKER_MARIADB_BROWSER_CONNECTION || '', port || '');
|
|
if (port !== '33308' || !process.env.JOBTRACKER_MARIADB_CLIENT) throw new Error('Pinned MariaDB port and native client are required.');
|
|
const { stdout } = await execute(process.env.JOBTRACKER_MARIADB_CLIENT,
|
|
['--host=127.0.0.1', `--port=${port}`, '--user=root', `--database=${database}`, '--batch', '--raw', '--skip-column-names',
|
|
`--execute=SET TRANSACTION READ ONLY; START TRANSACTION; ${query}; COMMIT;`],
|
|
{ encoding: 'utf8', timeout: 15000, maxBuffer: 4 * 1024 * 1024, env: { ...process.env, MYSQL_PWD: 'jt-integration-only' } });
|
|
return stdout.trim();
|
|
}
|
|
|
|
export async function snapshot(owner) {
|
|
if (!/^[a-zA-Z0-9-]{1,64}$/.test(owner)) throw new Error('Invalid synthetic owner ID.');
|
|
return JSON.parse(await sql(`SELECT JSON_OBJECT(
|
|
'ids',(SELECT JSON_ARRAYAGG(Id ORDER BY Id) FROM JobApplications WHERE OwnerUserId='${owner}'),
|
|
'ownerCount',(SELECT COUNT(*) FROM JobApplications WHERE OwnerUserId='${owner}'),
|
|
'deletedCount',(SELECT COUNT(*) FROM JobApplications WHERE OwnerUserId='${owner}' AND IsDeleted=1),
|
|
'tenantCounts',(SELECT JSON_ARRAYAGG(JSON_OBJECT('owner',OwnerUserId,'count',n) ORDER BY OwnerUserId)
|
|
FROM (SELECT OwnerUserId,COUNT(*) n FROM JobApplications GROUP BY OwnerUserId) counts),
|
|
'profile',(SELECT ProfileJson FROM CareerProfiles WHERE OwnerUserId='${owner}'),
|
|
'revision',(SELECT Version FROM CareerProfiles WHERE OwnerUserId='${owner}'),
|
|
'projection',(SELECT ProfileCvStructureJson FROM AspNetUsers WHERE Id='${owner}'),
|
|
'historyCount',(SELECT COUNT(*) FROM CareerProfileVersions WHERE OwnerUserId='${owner}'))`));
|
|
}
|