From dd47f876164dee0cd073c7d0f7061f5ae0732442 Mon Sep 17 00:00:00 2001 From: Ajay Date: Wed, 20 Jul 2022 01:21:13 -0400 Subject: [PATCH] Add more things to read from replica --- src/routes/getSavedTimeForUser.ts | 2 +- src/routes/getUserInfo.ts | 16 ++++++++-------- src/routes/getUsername.ts | 2 +- src/routes/getViewsForUser.ts | 2 +- src/utils/features.ts | 2 +- src/utils/isUserVIP.ts | 3 ++- src/utils/reputation.ts | 2 +- 7 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/routes/getSavedTimeForUser.ts b/src/routes/getSavedTimeForUser.ts index b7c7424..e95610a 100644 --- a/src/routes/getSavedTimeForUser.ts +++ b/src/routes/getSavedTimeForUser.ts @@ -18,7 +18,7 @@ export async function getSavedTimeForUser(req: Request, res: Response): Promise< userID = await getHashCache(userID); try { - const row = await db.prepare("get", 'SELECT SUM(((CASE WHEN "endTime" - "startTime" > ? THEN ? ELSE "endTime" - "startTime" END) / 60) * "views") as "minutesSaved" FROM "sponsorTimes" WHERE "userID" = ? AND "votes" > -1 AND "shadowHidden" != 1 ', [maxRewardTimePerSegmentInSeconds, maxRewardTimePerSegmentInSeconds, userID]); + const row = await db.prepare("get", 'SELECT SUM(((CASE WHEN "endTime" - "startTime" > ? THEN ? ELSE "endTime" - "startTime" END) / 60) * "views") as "minutesSaved" FROM "sponsorTimes" WHERE "userID" = ? AND "votes" > -1 AND "shadowHidden" != 1 ', [maxRewardTimePerSegmentInSeconds, maxRewardTimePerSegmentInSeconds, userID], { useReplica: true }); if (row.minutesSaved != null) { return res.send({ diff --git a/src/routes/getUserInfo.ts b/src/routes/getUserInfo.ts index 0c913c3..8f31a01 100644 --- a/src/routes/getUserInfo.ts +++ b/src/routes/getUserInfo.ts @@ -15,7 +15,7 @@ async function dbGetSubmittedSegmentSummary(userID: HashedUserID): Promise<{ min const row = await db.prepare("get", `SELECT SUM(((CASE WHEN "endTime" - "startTime" > ? THEN ? ELSE "endTime" - "startTime" END) / 60) * "views") as "minutesSaved", count(*) as "segmentCount" FROM "sponsorTimes" - WHERE "userID" = ? AND "votes" > -2 AND "shadowHidden" != 1`, [maxRewardTime, maxRewardTime, userID]); + WHERE "userID" = ? AND "votes" > -2 AND "shadowHidden" != 1`, [maxRewardTime, maxRewardTime, userID], { useReplica: true }); if (row.minutesSaved != null) { return { minutesSaved: row.minutesSaved, @@ -34,7 +34,7 @@ async function dbGetSubmittedSegmentSummary(userID: HashedUserID): Promise<{ min async function dbGetIgnoredSegmentCount(userID: HashedUserID): Promise { try { - const row = await db.prepare("get", `SELECT COUNT(*) as "ignoredSegmentCount" FROM "sponsorTimes" WHERE "userID" = ? AND ( "votes" <= -2 OR "shadowHidden" = 1 )`, [userID]); + const row = await db.prepare("get", `SELECT COUNT(*) as "ignoredSegmentCount" FROM "sponsorTimes" WHERE "userID" = ? AND ( "votes" <= -2 OR "shadowHidden" = 1 )`, [userID], { useReplica: true }); return row?.ignoredSegmentCount ?? 0; } catch (err) { return null; @@ -52,7 +52,7 @@ async function dbGetUsername(userID: HashedUserID) { async function dbGetViewsForUser(userID: HashedUserID) { try { - const row = await db.prepare("get", `SELECT SUM("views") as "viewCount" FROM "sponsorTimes" WHERE "userID" = ? AND "votes" > -2 AND "shadowHidden" != 1`, [userID]); + const row = await db.prepare("get", `SELECT SUM("views") as "viewCount" FROM "sponsorTimes" WHERE "userID" = ? AND "votes" > -2 AND "shadowHidden" != 1`, [userID], { useReplica: true }); return row?.viewCount ?? 0; } catch (err) { return false; @@ -61,7 +61,7 @@ async function dbGetViewsForUser(userID: HashedUserID) { async function dbGetIgnoredViewsForUser(userID: HashedUserID) { try { - const row = await db.prepare("get", `SELECT SUM("views") as "ignoredViewCount" FROM "sponsorTimes" WHERE "userID" = ? AND ( "votes" <= -2 OR "shadowHidden" = 1 )`, [userID]); + const row = await db.prepare("get", `SELECT SUM("views") as "ignoredViewCount" FROM "sponsorTimes" WHERE "userID" = ? AND ( "votes" <= -2 OR "shadowHidden" = 1 )`, [userID], { useReplica: true }); return row?.ignoredViewCount ?? 0; } catch (err) { return false; @@ -70,7 +70,7 @@ async function dbGetIgnoredViewsForUser(userID: HashedUserID) { async function dbGetWarningsForUser(userID: HashedUserID): Promise { try { - const row = await db.prepare("get", `SELECT COUNT(*) as total FROM "warnings" WHERE "userID" = ? AND "enabled" = 1`, [userID]); + const row = await db.prepare("get", `SELECT COUNT(*) as total FROM "warnings" WHERE "userID" = ? AND "enabled" = 1`, [userID], { useReplica: true }); return row?.total ?? 0; } catch (err) { Logger.error(`Couldn't get warnings for user ${userID}. returning 0`); @@ -80,7 +80,7 @@ async function dbGetWarningsForUser(userID: HashedUserID): Promise { async function dbGetLastSegmentForUser(userID: HashedUserID): Promise { try { - const row = await db.prepare("get", `SELECT "UUID" FROM "sponsorTimes" WHERE "userID" = ? ORDER BY "timeSubmitted" DESC LIMIT 1`, [userID]); + const row = await db.prepare("get", `SELECT "UUID" FROM "sponsorTimes" WHERE "userID" = ? ORDER BY "timeSubmitted" DESC LIMIT 1`, [userID], { useReplica: true }); return row?.UUID ?? null; } catch (err) { return null; @@ -89,7 +89,7 @@ async function dbGetLastSegmentForUser(userID: HashedUserID): Promise { try { - const row = await db.prepare("get", `SELECT reason FROM "warnings" WHERE "userID" = ? AND "enabled" = 1 ORDER BY "issueTime" DESC LIMIT 1`, [userID]); + const row = await db.prepare("get", `SELECT reason FROM "warnings" WHERE "userID" = ? AND "enabled" = 1 ORDER BY "issueTime" DESC LIMIT 1`, [userID], { useReplica: true }); return row?.reason ?? ""; } catch (err) { Logger.error(`Couldn't get reason for user ${userID}. returning blank`); @@ -99,7 +99,7 @@ async function dbGetActiveWarningReasonForUser(userID: HashedUserID): Promise { try { - const row = await db.prepare("get", `SELECT count(*) as "userCount" FROM "shadowBannedUsers" WHERE "userID" = ? LIMIT 1`, [userID]); + const row = await db.prepare("get", `SELECT count(*) as "userCount" FROM "shadowBannedUsers" WHERE "userID" = ? LIMIT 1`, [userID], { useReplica: true }); return row?.userCount > 0 ?? false; } catch (err) { return false; diff --git a/src/routes/getUsername.ts b/src/routes/getUsername.ts index 6411434..28098fe 100644 --- a/src/routes/getUsername.ts +++ b/src/routes/getUsername.ts @@ -15,7 +15,7 @@ export async function getUsername(req: Request, res: Response): Promise { return await QueryCacher.get(async () => { - const result = await db.prepare("get", 'SELECT "feature" from "userFeatures" WHERE "userID" = ? AND "feature" = ?', [userID, feature]); + const result = await db.prepare("get", 'SELECT "feature" from "userFeatures" WHERE "userID" = ? AND "feature" = ?', [userID, feature], { useReplica: true }); return !!result; }, userFeatureKey(userID, feature)); } \ No newline at end of file diff --git a/src/utils/isUserVIP.ts b/src/utils/isUserVIP.ts index b4ac6c1..ed1ba09 100644 --- a/src/utils/isUserVIP.ts +++ b/src/utils/isUserVIP.ts @@ -2,5 +2,6 @@ import { db } from "../databases/databases"; import { HashedUserID } from "../types/user.model"; export async function isUserVIP(userID: HashedUserID): Promise { - return (await db.prepare("get", `SELECT count(*) as "userCount" FROM "vipUsers" WHERE "userID" = ? LIMIT 1`, [userID]))?.userCount > 0; + return (await db.prepare("get", `SELECT count(*) as "userCount" FROM "vipUsers" WHERE "userID" = ? LIMIT 1`, + [userID], { useReplica: true }))?.userCount > 0; } diff --git a/src/utils/reputation.ts b/src/utils/reputation.ts index 873fa5f..092f384 100644 --- a/src/utils/reputation.ts +++ b/src/utils/reputation.ts @@ -40,7 +40,7 @@ export async function getReputation(userID: UserID): Promise { SELECT * FROM "lockCategories" as l WHERE l."videoID" = "a"."videoID" AND l."service" = "a"."service" AND l."category" = "a"."category" LIMIT 1) THEN 1 ELSE 0 END) AS "mostUpvotedInLockedVideoSum" - FROM "sponsorTimes" as "a" WHERE "userID" = ?`, [userID, weekAgo, pastDate, userID]) as Promise; + FROM "sponsorTimes" as "a" WHERE "userID" = ?`, [userID, weekAgo, pastDate, userID], { useReplica: true }) as Promise; const result = await QueryCacher.get(fetchFromDB, reputationKey(userID));