Files
2026-08-20 15:08:32 +00:00

86 lines
2.1 KiB
JavaScript

import { getPool } from "../../db/index.js";
export async function trackUsage(user_id, url, type, success, eventId = null, agreementId = null) {
const client = await getPool();
try {
await client.query(`
INSERT INTO usage_url (
url,
module
) VALUES (
$1,
$2
) ON CONFLICT DO NOTHING;
`, [
url,
type,
]);
await client.query(`
INSERT INTO usage (
user_id,
usage_url_id,
success,
event_id_uuid,
agreement_id_uuid
) VALUES (
$1,
(
SELECT id
FROM usage_url
WHERE url = $2
),
$3,
$4,
$5
);
`, [
user_id,
url,
success,
eventId,
agreementId,
]);
} catch(e) {
console.error(e)
} finally {
await client.release();
}
}
export async function getUsage(user, begin, end) {
const client = await getPool();
let ret = [];
try {
let res = await client.query(`
WITH base AS (
SELECT
uu.module,
COUNT(*) AS num
FROM usage u
JOIN usage_url uu ON uu.id = u.usage_url_id
WHERE u.created_ts >= $1
AND u.created_ts < $2
AND u.user_id = $3
GROUP BY uu.module
)
SELECT
json_object_agg(
module,
num
) AS usage_counts
FROM base
`, [
begin,
end,
user.id,
]);
if (res.rows.length > 0) {
ret = res.rows[0].usage_counts;
}
} catch(e) {
console.error(e)
} finally {
await client.release();
}
return ret;
}