194 lines
5.1 KiB
JavaScript
194 lines
5.1 KiB
JavaScript
import 'dotenv/config';
|
|
import sql from 'mssql';
|
|
import chalk from 'chalk';
|
|
import * as p from '@clack/prompts';
|
|
import LibDashStore from '../src/index.js';
|
|
|
|
const config = {
|
|
server: process.env.MSSQL_SERVER,
|
|
database: process.env.MSSQL_DATABASE,
|
|
user: process.env.MSSQL_USER,
|
|
password: process.env.MSSQL_PASSWORD,
|
|
options: {
|
|
encrypt: false,
|
|
trustServerCertificate: true,
|
|
},
|
|
};
|
|
|
|
function printResult(label, value) {
|
|
p.log.step(chalk.cyan(label));
|
|
const text =
|
|
value === undefined
|
|
? chalk.dim('undefined')
|
|
: typeof value === 'string'
|
|
? value
|
|
: JSON.stringify(value, null, 2);
|
|
console.log(chalk.white(text));
|
|
console.log();
|
|
}
|
|
|
|
async function shutdown(pool, code = 0) {
|
|
try {
|
|
await pool.close();
|
|
} catch {
|
|
// ignore
|
|
}
|
|
process.exit(code);
|
|
}
|
|
|
|
async function main() {
|
|
console.clear();
|
|
p.intro(chalk.bgMagenta.black(' libdashstore ') + chalk.dim(' api tester'));
|
|
|
|
const spin = p.spinner();
|
|
spin.start('Connecting to MSSQL…');
|
|
|
|
let pool;
|
|
try {
|
|
pool = await sql.connect(config);
|
|
} catch (err) {
|
|
spin.stop(chalk.red('Connection failed'));
|
|
p.log.error(err.message);
|
|
p.outro(chalk.red('Aborted'));
|
|
process.exit(1);
|
|
}
|
|
|
|
spin.message('Initializing schema…');
|
|
let client;
|
|
try {
|
|
client = await new LibDashStore(pool);
|
|
spin.stop(chalk.green('Ready'));
|
|
} catch (err) {
|
|
spin.stop(chalk.red('Initialize failed'));
|
|
p.log.error(err.message);
|
|
await shutdown(pool, 1);
|
|
}
|
|
|
|
p.note(
|
|
[
|
|
chalk.dim(`${config.server} / ${config.database}`),
|
|
chalk.dim('purge ends the session'),
|
|
].join('\n'),
|
|
'Connected',
|
|
);
|
|
|
|
while (true) {
|
|
const action = await p.select({
|
|
message: 'API method',
|
|
options: [
|
|
{
|
|
value: 'companyuser.getByEmail',
|
|
label: 'companyuser.getByEmail',
|
|
hint: 'email → id',
|
|
},
|
|
{
|
|
value: 'company.getByCompanyUserId',
|
|
label: 'company.getByCompanyUserId',
|
|
hint: 'id → [id, lang, root, name]',
|
|
},
|
|
{
|
|
value: 'category.getTree',
|
|
label: 'category.getTree',
|
|
hint: 'rootId → tree',
|
|
},
|
|
{
|
|
value: 'initialize',
|
|
label: 'initialize',
|
|
hint: 'purge + recreate schema',
|
|
},
|
|
{
|
|
value: 'purge',
|
|
label: chalk.red('purge'),
|
|
hint: 'drop all · exit',
|
|
},
|
|
{ value: 'exit', label: 'exit', hint: 'quit without purge' },
|
|
],
|
|
});
|
|
|
|
if (p.isCancel(action) || action === 'exit') {
|
|
p.outro(chalk.dim('Bye'));
|
|
await shutdown(pool, 0);
|
|
}
|
|
|
|
try {
|
|
if (action === 'companyuser.getByEmail') {
|
|
const email = await p.text({
|
|
message: 'Email',
|
|
placeholder: 'user@example.com',
|
|
validate: (v) => (!v?.trim() ? 'Required' : undefined),
|
|
});
|
|
if (p.isCancel(email)) continue;
|
|
|
|
const run = p.spinner();
|
|
run.start('Running…');
|
|
const id = await client.companyuser.getByEmail(email.trim());
|
|
run.stop(chalk.green('companyuser.getByEmail'));
|
|
printResult('id', id);
|
|
continue;
|
|
}
|
|
|
|
if (action === 'company.getByCompanyUserId') {
|
|
const raw = await p.text({
|
|
message: 'Company user id',
|
|
placeholder: '1',
|
|
validate: (v) =>
|
|
!/^\d+$/.test(v?.trim() ?? '') ? 'Integer required' : undefined,
|
|
});
|
|
if (p.isCancel(raw)) continue;
|
|
|
|
const run = p.spinner();
|
|
run.start('Running…');
|
|
const row = await client.company.getByCompanyUserId(Number(raw.trim()));
|
|
run.stop(chalk.green('company.getByCompanyUserId'));
|
|
printResult('[id, defaultLangId, rootCategoryId, name]', row);
|
|
continue;
|
|
}
|
|
|
|
if (action === 'category.getTree') {
|
|
const raw = await p.text({
|
|
message: 'Root category id',
|
|
placeholder: '1',
|
|
validate: (v) =>
|
|
!/^\d+$/.test(v?.trim() ?? '') ? 'Integer required' : undefined,
|
|
});
|
|
if (p.isCancel(raw)) continue;
|
|
|
|
const run = p.spinner();
|
|
run.start('Running…');
|
|
const tree = await client.category.getTree(Number(raw.trim()));
|
|
run.stop(chalk.green('category.getTree'));
|
|
printResult('tree', tree);
|
|
continue;
|
|
}
|
|
|
|
if (action === 'initialize') {
|
|
const run = p.spinner();
|
|
run.start('Initializing…');
|
|
await client.initialize();
|
|
run.stop(chalk.green('initialize'));
|
|
p.log.success('Schema purged and recreated');
|
|
console.log();
|
|
continue;
|
|
}
|
|
|
|
if (action === 'purge') {
|
|
const run = p.spinner();
|
|
run.start('Purging…');
|
|
await client.purge();
|
|
run.stop(chalk.green('purge'));
|
|
p.outro(chalk.red('Database purged — exiting'));
|
|
await shutdown(pool, 0);
|
|
}
|
|
} catch (err) {
|
|
p.log.error(err.message);
|
|
console.log(chalk.dim(err.stack?.split('\n').slice(1, 4).join('\n') ?? ''));
|
|
console.log();
|
|
}
|
|
}
|
|
}
|
|
|
|
main().catch(async (err) => {
|
|
console.error(chalk.red(err.stack ?? err.message));
|
|
process.exit(1);
|
|
});
|