mirror of
https://github.com/ajayyy/SponsorBlockServer.git
synced 2025-12-15 16:07:03 +03:00
Add more things to read from replica
This commit is contained in:
@@ -18,7 +18,7 @@ export async function getSavedTimeForUser(req: Request, res: Response): Promise<
|
|||||||
userID = await getHashCache(userID);
|
userID = await getHashCache(userID);
|
||||||
|
|
||||||
try {
|
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) {
|
if (row.minutesSaved != null) {
|
||||||
return res.send({
|
return res.send({
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ async function dbGetSubmittedSegmentSummary(userID: HashedUserID): Promise<{ min
|
|||||||
const row = await db.prepare("get",
|
const row = await db.prepare("get",
|
||||||
`SELECT SUM(((CASE WHEN "endTime" - "startTime" > ? THEN ? ELSE "endTime" - "startTime" END) / 60) * "views") as "minutesSaved",
|
`SELECT SUM(((CASE WHEN "endTime" - "startTime" > ? THEN ? ELSE "endTime" - "startTime" END) / 60) * "views") as "minutesSaved",
|
||||||
count(*) as "segmentCount" FROM "sponsorTimes"
|
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) {
|
if (row.minutesSaved != null) {
|
||||||
return {
|
return {
|
||||||
minutesSaved: row.minutesSaved,
|
minutesSaved: row.minutesSaved,
|
||||||
@@ -34,7 +34,7 @@ async function dbGetSubmittedSegmentSummary(userID: HashedUserID): Promise<{ min
|
|||||||
|
|
||||||
async function dbGetIgnoredSegmentCount(userID: HashedUserID): Promise<number> {
|
async function dbGetIgnoredSegmentCount(userID: HashedUserID): Promise<number> {
|
||||||
try {
|
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;
|
return row?.ignoredSegmentCount ?? 0;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
return null;
|
return null;
|
||||||
@@ -52,7 +52,7 @@ async function dbGetUsername(userID: HashedUserID) {
|
|||||||
|
|
||||||
async function dbGetViewsForUser(userID: HashedUserID) {
|
async function dbGetViewsForUser(userID: HashedUserID) {
|
||||||
try {
|
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;
|
return row?.viewCount ?? 0;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
return false;
|
return false;
|
||||||
@@ -61,7 +61,7 @@ async function dbGetViewsForUser(userID: HashedUserID) {
|
|||||||
|
|
||||||
async function dbGetIgnoredViewsForUser(userID: HashedUserID) {
|
async function dbGetIgnoredViewsForUser(userID: HashedUserID) {
|
||||||
try {
|
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;
|
return row?.ignoredViewCount ?? 0;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
return false;
|
return false;
|
||||||
@@ -70,7 +70,7 @@ async function dbGetIgnoredViewsForUser(userID: HashedUserID) {
|
|||||||
|
|
||||||
async function dbGetWarningsForUser(userID: HashedUserID): Promise<number> {
|
async function dbGetWarningsForUser(userID: HashedUserID): Promise<number> {
|
||||||
try {
|
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;
|
return row?.total ?? 0;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
Logger.error(`Couldn't get warnings for user ${userID}. returning 0`);
|
Logger.error(`Couldn't get warnings for user ${userID}. returning 0`);
|
||||||
@@ -80,7 +80,7 @@ async function dbGetWarningsForUser(userID: HashedUserID): Promise<number> {
|
|||||||
|
|
||||||
async function dbGetLastSegmentForUser(userID: HashedUserID): Promise<SegmentUUID> {
|
async function dbGetLastSegmentForUser(userID: HashedUserID): Promise<SegmentUUID> {
|
||||||
try {
|
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;
|
return row?.UUID ?? null;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
return null;
|
return null;
|
||||||
@@ -89,7 +89,7 @@ async function dbGetLastSegmentForUser(userID: HashedUserID): Promise<SegmentUUI
|
|||||||
|
|
||||||
async function dbGetActiveWarningReasonForUser(userID: HashedUserID): Promise<string> {
|
async function dbGetActiveWarningReasonForUser(userID: HashedUserID): Promise<string> {
|
||||||
try {
|
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 ?? "";
|
return row?.reason ?? "";
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
Logger.error(`Couldn't get reason for user ${userID}. returning blank`);
|
Logger.error(`Couldn't get reason for user ${userID}. returning blank`);
|
||||||
@@ -99,7 +99,7 @@ async function dbGetActiveWarningReasonForUser(userID: HashedUserID): Promise<st
|
|||||||
|
|
||||||
async function dbGetBanned(userID: HashedUserID): Promise<boolean> {
|
async function dbGetBanned(userID: HashedUserID): Promise<boolean> {
|
||||||
try {
|
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;
|
return row?.userCount > 0 ?? false;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ export async function getUsername(req: Request, res: Response): Promise<Response
|
|||||||
userID = await getHashCache(userID);
|
userID = await getHashCache(userID);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const row = await db.prepare("get", `SELECT "userName" FROM "userNames" WHERE "userID" = ?`, [userID]);
|
const row = await db.prepare("get", `SELECT "userName" FROM "userNames" WHERE "userID" = ?`, [userID], { useReplica: true });
|
||||||
|
|
||||||
if (row !== undefined) {
|
if (row !== undefined) {
|
||||||
return res.send({
|
return res.send({
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ export async function getViewsForUser(req: Request, res: Response): Promise<Resp
|
|||||||
userID = await getHashCache(userID);
|
userID = await getHashCache(userID);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const row = await db.prepare("get", `SELECT SUM("views") as "viewCount" FROM "sponsorTimes" WHERE "userID" = ?`, [userID]);
|
const row = await db.prepare("get", `SELECT SUM("views") as "viewCount" FROM "sponsorTimes" WHERE "userID" = ?`, [userID], { useReplica: true });
|
||||||
|
|
||||||
//increase the view count by one
|
//increase the view count by one
|
||||||
if (row.viewCount != null) {
|
if (row.viewCount != null) {
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { userFeatureKey } from "./redisKeys";
|
|||||||
|
|
||||||
export async function hasFeature(userID: HashedUserID, feature: Feature): Promise<boolean> {
|
export async function hasFeature(userID: HashedUserID, feature: Feature): Promise<boolean> {
|
||||||
return await QueryCacher.get(async () => {
|
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;
|
return !!result;
|
||||||
}, userFeatureKey(userID, feature));
|
}, userFeatureKey(userID, feature));
|
||||||
}
|
}
|
||||||
@@ -2,5 +2,6 @@ import { db } from "../databases/databases";
|
|||||||
import { HashedUserID } from "../types/user.model";
|
import { HashedUserID } from "../types/user.model";
|
||||||
|
|
||||||
export async function isUserVIP(userID: HashedUserID): Promise<boolean> {
|
export async function isUserVIP(userID: HashedUserID): Promise<boolean> {
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ export async function getReputation(userID: UserID): Promise<number> {
|
|||||||
SELECT * FROM "lockCategories" as l
|
SELECT * FROM "lockCategories" as l
|
||||||
WHERE l."videoID" = "a"."videoID" AND l."service" = "a"."service" AND l."category" = "a"."category" LIMIT 1)
|
WHERE l."videoID" = "a"."videoID" AND l."service" = "a"."service" AND l."category" = "a"."category" LIMIT 1)
|
||||||
THEN 1 ELSE 0 END) AS "mostUpvotedInLockedVideoSum"
|
THEN 1 ELSE 0 END) AS "mostUpvotedInLockedVideoSum"
|
||||||
FROM "sponsorTimes" as "a" WHERE "userID" = ?`, [userID, weekAgo, pastDate, userID]) as Promise<ReputationDBResult>;
|
FROM "sponsorTimes" as "a" WHERE "userID" = ?`, [userID, weekAgo, pastDate, userID], { useReplica: true }) as Promise<ReputationDBResult>;
|
||||||
|
|
||||||
const result = await QueryCacher.get(fetchFromDB, reputationKey(userID));
|
const result = await QueryCacher.get(fetchFromDB, reputationKey(userID));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user