From d608125b4132b96fe11e00057eca9a908844c45f Mon Sep 17 00:00:00 2001 From: Ajay Date: Wed, 12 Feb 2025 03:52:03 -0500 Subject: [PATCH] Add endpoint for casual submission count --- databases/_private_indexes.sql | 5 +++++ src/routes/getUserInfo.ts | 15 +++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/databases/_private_indexes.sql b/databases/_private_indexes.sql index 021db4f..84da1d2 100644 --- a/databases/_private_indexes.sql +++ b/databases/_private_indexes.sql @@ -30,4 +30,9 @@ CREATE INDEX IF NOT EXISTS "ratings_videoID" CREATE INDEX IF NOT EXISTS "casualVotes_videoID" ON public."casualVotes" USING btree ("videoID" COLLATE pg_catalog."default" ASC NULLS LAST, "service" COLLATE pg_catalog."default" ASC NULLS LAST, "userID" COLLATE pg_catalog."default" ASC NULLS LAST) + TABLESPACE pg_default; + +CREATE INDEX IF NOT EXISTS "casualVotes_userID" + ON public."casualVotes" USING btree + ("userID" COLLATE pg_catalog."default" ASC NULLS LAST) TABLESPACE pg_default; \ No newline at end of file diff --git a/src/routes/getUserInfo.ts b/src/routes/getUserInfo.ts index a167c7c..1bc5659 100644 --- a/src/routes/getUserInfo.ts +++ b/src/routes/getUserInfo.ts @@ -1,4 +1,4 @@ -import { db } from "../databases/databases"; +import { db, privateDB } from "../databases/databases"; import { getHashCache } from "../utils/getHashCache"; import { isUserVIP } from "../utils/isUserVIP"; import { Request, Response } from "express"; @@ -144,6 +144,16 @@ async function getThumbnailSubmissionCount(userID: HashedUserID): Promise { + try { + const row = await privateDB.prepare("get", `SELECT COUNT(DISTINCT "videoID") as "casualSubmissionCount" FROM "casualVotes" WHERE "userID" = ?`, [userID], { useReplica: true }); + return row?.casualSubmissionCount ?? 0; + } catch (err) /* istanbul ignore next */ { + return null; + } +} + + type cases = Record const executeIfFunction = (f: any) => @@ -173,6 +183,7 @@ const dbGetValue = (userID: HashedUserID, property: string): Promise true, titleSubmissionCount: () => getTitleSubmissionCount(userID), thumbnailSubmissionCount: () => getThumbnailSubmissionCount(userID), + casualSubmissionCount: () => getCasualSubmissionCount(userID), })("")(property); }; @@ -183,7 +194,7 @@ async function getUserInfo(req: Request, res: Response): Promise { "viewCount", "ignoredViewCount", "warnings", "warningReason", "reputation", "vip", "lastSegmentID"]; const allProperties: string[] = [...defaultProperties, "banned", "permissions", "freeChaptersAccess", - "ignoredSegmentCount", "titleSubmissionCount", "thumbnailSubmissionCount", "deArrowWarningReason"]; + "ignoredSegmentCount", "titleSubmissionCount", "thumbnailSubmissionCount", "casualSubmissionCount", "deArrowWarningReason"]; let paramValues: string[] = req.query.values ? JSON.parse(req.query.values as string) : req.query.value