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; }