addition of new dashboard
This commit is contained in:
86
backend/modules/core/usage.js
Normal file
86
backend/modules/core/usage.js
Normal file
@@ -0,0 +1,86 @@
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user