add segment generator

- getIsUserVIP
- postClearCache
- update boilerplate
This commit is contained in:
Michael C
2023-09-27 22:21:42 -04:00
parent 964634dc51
commit a9ef3815e2
5 changed files with 141 additions and 99 deletions

View File

@@ -3,24 +3,14 @@ import { HashedUserID } from "../../src/types/user.model";
import { User, userArray, usernameUserArray } from "./genUser";
import { Feature } from "../../src/types/user.model";
// usernames
export const insertUsername = async (db: IDatabase, userID: HashedUserID, userName: string, locked = false) => {
const query = 'INSERT INTO "userNames" ("userID", "userName", "locked") VALUES(?, ?, ?)';
const lockedValue = Number(locked);
await db.prepare("run", query, [userID, userName, lockedValue]);
};
export const insertUsernameBulk = async (db: IDatabase, users: usernameUserArray) => {
for (const user of Object.values(users))
await insertUsername(db, user.pubID, user.username, false);
};
// segments
export { insertSegment } from "./segmentQueryGen";
// vip
export const insertVip = async (db: IDatabase, userID: HashedUserID) => {
const query = 'INSERT INTO "vipUsers" ("userID") VALUES (?)';
await db.prepare("run", query, [userID]);
};
export const insertVipBulk = async (db: IDatabase, users: userArray) => {
for (const user of Object.values(users))
await insertVip(db, user.pubID);
@@ -31,8 +21,18 @@ export const grantFeature = async (db: IDatabase, target: HashedUserID, feature:
const query = 'INSERT INTO "userFeatures" ("userID", "feature", "issuerUserID", "timeSubmitted") VALUES(?, ?, ?, ?)';
await db.prepare("run", query, [target, feature, issuer, time]);
};
export const bulkGrantFeature = async (db: IDatabase, users: userArray, feature: Feature, issuer: User, time = 0) => {
for (const user of Object.values(users))
await grantFeature(db, user.pubID, feature, issuer.pubID, time);
};
};
// usernames
export const insertUsername = async (db: IDatabase, userID: HashedUserID, userName: string, locked = false) => {
const query = 'INSERT INTO "userNames" ("userID", "userName", "locked") VALUES(?, ?, ?)';
const lockedValue = Number(locked);
await db.prepare("run", query, [userID, userName, lockedValue]);
};
export const insertUsernameBulk = async (db: IDatabase, users: usernameUserArray) => {
for (const user of Object.values(users))
await insertUsername(db, user.pubID, user.username, false);
};

View File

@@ -0,0 +1,64 @@
import { IDatabase } from "../../src/databases/IDatabase";
import { Service, VideoIDHash, VideoID } from "../../src/types/segments.model";
import { HashedUserID, UserID } from "../../src/types/user.model";
import { genRandom } from "./getRandom";
import { getHash } from "../../src/utils/getHash";
type insertSegmentParams = {
videoID?: string,
startTime?: number,
endTime?: number,
votes?: number,
locked?: boolean | number,
UUID?: string,
userID?: HashedUserID | "",
timeSubmitted?: number,
views?: number,
category?: string,
actionType?: string,
service?: Service,
videoDuration?: number,
hidden?: boolean | number,
shadowHidden?: boolean | number,
hashedVideoID?: VideoIDHash | "",
description?: string
};
const defaultSegmentParams: insertSegmentParams = {
videoID: "",
startTime: 0,
endTime: 0,
votes: 0,
locked: false,
UUID: "",
userID: "",
timeSubmitted: 0,
views: 0,
category: "sponsor",
actionType: "skip",
service: Service.YouTube,
videoDuration: 0,
hidden: false,
shadowHidden: false,
hashedVideoID: "",
description: ""
};
// sponsorTimes
export const insertSegment = async(db: IDatabase, fnname: string, testcase: string, params: insertSegmentParams = defaultSegmentParams) => {
const query = 'INSERT INTO "sponsorTimes" ("videoID", "startTime", "endTime", "votes", "locked", "UUID", "userID", "timeSubmitted", "views", "category", "actionType", "service", "videoDuration", "hidden", "shadowHidden", "hashedVideoID", "description") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
// corrections for parameters
const identifier = `${fnname}-${testcase}`;
const correctedParams = params;
// generate defaults
const videoID = (params.videoID || `vid-${identifier}`) as VideoID;
const userID = (params.userID || `user-${identifier}`) as UserID;
if (!params.videoID) correctedParams.videoID = videoID;
if (!params.UUID) correctedParams.UUID = `uuid-${identifier}-${genRandom(2)}`;
if (!params.userID) correctedParams.userID = getHash(userID);
if (!params.hashedVideoID) correctedParams.hashedVideoID = getHash(videoID);
// convert bool to 0 | 1
correctedParams.locked = Number(params.locked);
correctedParams.hidden = Number(params.hidden);
correctedParams.shadowHidden = Number(params.shadowHidden);
await db.prepare("run", query, Object.values(correctedParams));
};