From 5eb5f2d5ff786c018495cfa16c78cec469599c28 Mon Sep 17 00:00:00 2001 From: bloodwiing Date: Tue, 14 May 2024 14:01:21 +0300 Subject: [PATCH] Add: Post Metrics --- src/lib/server/db/postmertics.js | 46 +++++++++++++++++++ src/routes/(app)/posts/[name]/+page.server.js | 3 ++ src/types/base.ts | 13 ++++++ 3 files changed, 62 insertions(+) create mode 100644 src/lib/server/db/postmertics.js diff --git a/src/lib/server/db/postmertics.js b/src/lib/server/db/postmertics.js new file mode 100644 index 0000000..e30a80f --- /dev/null +++ b/src/lib/server/db/postmertics.js @@ -0,0 +1,46 @@ +/** + * @typedef {import('$types/base').PostMetrics} PostMetrics + */ + +import { sql } from '$lib/db.server'; + +/** + * @param {import('$types/base').Post} post + * @param {import('postgres').Row} row + * @returns {PostMetrics} + */ +function parsePostMetricsFromRow(post, row) { + return { + post: post, + commentCount: BigInt(row['comment_count']), + userCount: BigInt(row['user_count']), + latestActivity: row['latest_activity'], + rating: post.rating, + score: BigInt(row['score']), + engagement: BigInt(row['engagement']), + age: row['age'], + relevancy: row['relevancy'] + }; +} + +/** + * @param {import('$types/base').Post} post + * @returns {Promise} + */ +export async function getPostMetrics(post) { + const query = sql` + SELECT comment_count, user_count, latest_activity, score, engagement, age, relevancy + FROM doki8902.post_metrics + WHERE post_id = ${ post.id }`; + + const result = await query; + + if (result.length == 0) { + return { + error: true, + msg: `Could not find PostMetrics for Post ID ${post.id}` + }; + } + + return parsePostMetricsFromRow(post, result[0]); +} diff --git a/src/routes/(app)/posts/[name]/+page.server.js b/src/routes/(app)/posts/[name]/+page.server.js index 1118fc5..3231980 100644 --- a/src/routes/(app)/posts/[name]/+page.server.js +++ b/src/routes/(app)/posts/[name]/+page.server.js @@ -1,5 +1,6 @@ import { getCommentsForPost } from "$lib/server/db/comment"; import { getPost } from "$lib/server/db/post"; +import { getPostMetrics } from "$lib/server/db/postmertics"; import { getIdFromName } from "$lib/util"; import { error } from "@sveltejs/kit"; @@ -15,6 +16,8 @@ export async function load({ params, locals }) { const comments = await getCommentsForPost(locals.sql, post_id); + console.log(await getPostMetrics(post)); + return { post: post, comments: comments diff --git a/src/types/base.ts b/src/types/base.ts index 09666f4..d13548b 100644 --- a/src/types/base.ts +++ b/src/types/base.ts @@ -39,3 +39,16 @@ export type CommentTreeNode = { parent: Comment, children: (CommentTreeNode | number)[] }; + +export type PostMetrics = { + post: Post, + commentCount: bigint, + userCount: bigint, + latestActivity: Date, + rating: Rating, + score: bigint, + + engagement: bigint, + age: number, + relevancy: number +};