86 lines
2.1 KiB
JavaScript
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;
|
|
} |