add reason to getLockCategories

This commit is contained in:
Michael C
2021-07-07 00:22:05 -04:00
parent e94d1d4bae
commit 3371c6a099
4 changed files with 47 additions and 22 deletions

View File

@@ -13,11 +13,17 @@ export async function getLockCategories(req: Request, res: Response): Promise<Re
try {
// Get existing lock categories markers
const lockedCategories = await db.prepare('all', 'SELECT "category" from "lockCategories" where "videoID" = ?', [videoID]) as {category: Category}[];
if (lockedCategories.length === 0 || !lockedCategories[0]) return res.sendStatus(404);
const row = await db.prepare('all', 'SELECT "category", "reason" from "lockCategories" where "videoID" = ?', [videoID]) as {category: Category, reason: string}[];
// map to array in JS becaues of SQL incompatibilities
const categories = Object.values(lockedCategories).map((entry) => entry.category);
const categories = row.map(item => item.category);
if (categories.length === 0 || !categories[0]) return res.sendStatus(404);
// Get existing lock categories markers
const reasons = row.map(item => item.reason);
let longReason = "";
// set longReason if current length is longer
reasons.forEach((e) => { if (e.length > longReason.length) longReason = e; });
return res.send({
reason: longReason,
categories
});
} catch (err) {

View File

@@ -7,13 +7,15 @@ import { Category, VideoID, VideoIDHash } from "../types/segments.model";
interface LockResultByHash {
videoID: VideoID,
hash: VideoIDHash,
reason: string,
categories: Category[]
}
interface DBLock {
videoID: VideoID,
hash: VideoIDHash,
category: Category
category: Category,
reason: string,
}
const mergeLocks = (source: DBLock[]) => {
@@ -22,12 +24,15 @@ const mergeLocks = (source: DBLock[]) => {
// videoID already exists
const destMatch = dest.find(s => s.videoID === obj.videoID);
if (destMatch) {
// override longer reason
if (destMatch.reason.length > obj.reason.length) destMatch.reason = obj.reason;
// push to categories
destMatch.categories.push(obj.category);
} else {
dest.push({
videoID: obj.videoID,
hash: obj.hash,
reason: obj.reason,
categories: [obj.category]
});
}
@@ -45,7 +50,7 @@ export async function getLockCategoriesByHash(req: Request, res: Response): Prom
try {
// Get existing lock categories markers
const lockedRows = await db.prepare('all', 'SELECT "videoID", "hashedVideoID" as "hash", "category" from "lockCategories" where "hashedVideoID" LIKE ?', [hashPrefix + '%']) as DBLock[];
const lockedRows = await db.prepare('all', 'SELECT "videoID", "hashedVideoID" as "hash", "category", "reason" from "lockCategories" where "hashedVideoID" LIKE ?', [hashPrefix + '%']) as DBLock[];
if (lockedRows.length === 0 || !lockedRows[0]) return res.sendStatus(404);
// merge all locks
return res.send(mergeLocks(lockedRows));

View File

@@ -9,19 +9,19 @@ describe('getLockCategories', () => {
const insertVipUserQuery = 'INSERT INTO "vipUsers" ("userID") VALUES (?)';
await db.prepare("run", insertVipUserQuery, [getHash("VIPUser-getLockCategories")]);
const insertLockCategoryQuery = 'INSERT INTO "lockCategories" ("userID", "videoID", "category") VALUES (?, ?, ?)';
await db.prepare("run", insertLockCategoryQuery, [getHash("VIPUser-getLockCategories"), 'getLock-1', 'sponsor']);
await db.prepare("run", insertLockCategoryQuery, [getHash("VIPUser-getLockCategories"), 'getLock-1', 'interaction']);
const insertLockCategoryQuery = 'INSERT INTO "lockCategories" ("userID", "videoID", "category", "reason") VALUES (?, ?, ?, ?)';
await db.prepare("run", insertLockCategoryQuery, [getHash("VIPUser-getLockCategories"), 'getLock-1', 'sponsor', '1-short']);
await db.prepare("run", insertLockCategoryQuery, [getHash("VIPUser-getLockCategories"), 'getLock-1', 'interaction', '2-longer-reason']);
await db.prepare("run", insertLockCategoryQuery, [getHash("VIPUser-getLockCategories"), 'getLock-2', 'preview']);
await db.prepare("run", insertLockCategoryQuery, [getHash("VIPUser-getLockCategories"), 'getLock-2', 'preview', '2-reason']);
await db.prepare("run", insertLockCategoryQuery, [getHash("VIPUser-getLockCategories"), 'getLock-3', 'nonmusic']);
await db.prepare("run", insertLockCategoryQuery, [getHash("VIPUser-getLockCategories"), 'getLock-3', 'nonmusic', '3-reason']);
});
it('Should update the database version when starting the application', async () => {
const version = (await db.prepare('get', 'SELECT key, value FROM config where key = ?', ['version'])).value;
if (version > 1) return;
else return 'Version isn\'t greater than 1. Version is ' + version;
if (version > 20) return;
else return 'Version isn\'t greater than 20. Version is ' + version;
});
it('Should be able to get multiple locks', (done: Done) => {
@@ -37,6 +37,8 @@ describe('getLockCategories', () => {
done(`Returned incorrect category "${data.categories[0]}"`);
} else if (data.categories[1] !== "interaction") {
done(`Returned incorrect category "${data.categories[1]}"`);
} else if (data.reason !== "1-longer-reason") {
done(`Returned incorrect reason "${data.reason}"`);
} else {
done(); // pass
}
@@ -56,6 +58,8 @@ describe('getLockCategories', () => {
done('Returned incorrect number of locks "' + data.categories.length + '"');
} else if (data.categories[0] !== "preview") {
done(`Returned incorrect category "${data.categories[0].category}"`);
} else if (data.reason !== "2-reason") {
done(`Returned incorrect reason "${data.reason}"`);
} else {
done(); // pass
}

View File

@@ -9,23 +9,23 @@ describe('getLockCategoriesByHash', () => {
const insertVipUserQuery = 'INSERT INTO "vipUsers" ("userID") VALUES (?)';
await db.prepare("run", insertVipUserQuery, [getHash("VIPUser-getLockCategories")]);
const insertLockCategoryQuery = 'INSERT INTO "lockCategories" ("userID", "videoID", "category", "hashedVideoID") VALUES (?, ?, ?, ?)';
await db.prepare("run", insertLockCategoryQuery, [getHash("VIPUser-getLockCategories"), 'getLockHash-1', 'sponsor', '67a654898fda3a5541774aea345796c7709982bb6018cb08d22a18eeddccc1d0']);
await db.prepare("run", insertLockCategoryQuery, [getHash("VIPUser-getLockCategories"), 'getLockHash-1', 'interaction', '67a654898fda3a5541774aea345796c7709982bb6018cb08d22a18eeddccc1d0']);
const insertLockCategoryQuery = 'INSERT INTO "lockCategories" ("userID", "videoID", "category", "reaspm", "hashedVideoID") VALUES (?, ?, ?, ?)';
await db.prepare("run", insertLockCategoryQuery, [getHash("VIPUser-getLockCategories"), 'getLockHash-1', 'sponsor', '1-reason-short', '67a654898fda3a5541774aea345796c7709982bb6018cb08d22a18eeddccc1d0']);
await db.prepare("run", insertLockCategoryQuery, [getHash("VIPUser-getLockCategories"), 'getLockHash-1', 'interaction', '1-longer-reason', '67a654898fda3a5541774aea345796c7709982bb6018cb08d22a18eeddccc1d0']);
await db.prepare("run", insertLockCategoryQuery, [getHash("VIPUser-getLockCategories"), 'getLockHash-2', 'preview', 'dff09120437b4bd594dffae5f3cde3cfc5f6099fb01d0ef4051919b2908d9a50']);
await db.prepare("run", insertLockCategoryQuery, [getHash("VIPUser-getLockCategories"), 'getLockHash-2', 'preview', '2-reason', 'dff09120437b4bd594dffae5f3cde3cfc5f6099fb01d0ef4051919b2908d9a50']);
await db.prepare("run", insertLockCategoryQuery, [getHash("VIPUser-getLockCategories"), 'getLockHash-3', 'nonmusic', 'bf1b122fd5630e0df8626d00c4a95c58954ad715e5595b0f75a19ac131e28928']);
await db.prepare("run", insertLockCategoryQuery, [getHash("VIPUser-getLockCategories"), 'getLockHash-3', 'nonmusic', '3-reason', 'bf1b122fd5630e0df8626d00c4a95c58954ad715e5595b0f75a19ac131e28928']);
await db.prepare("run", insertLockCategoryQuery, [getHash("VIPUser-getLockCategories"), 'fakehash-1', 'outro', 'b05a20424f24a53dac1b059fb78d861ba9723645026be2174c93a94f9106bb35']);
await db.prepare("run", insertLockCategoryQuery, [getHash("VIPUser-getLockCategories"), 'fakehash-2', 'intro', 'b05acd1cd6ec7dffe5ffea64ada91ae7469d6db2ce21c7e30ad7fa62075d450']);
await db.prepare("run", insertLockCategoryQuery, [getHash("VIPUser-getLockCategories"), 'fakehash-2', 'preview', 'b05acd1cd6ec7dffe5ffea64ada91ae7469d6db2ce21c7e30ad7fa62075d450']);
await db.prepare("run", insertLockCategoryQuery, [getHash("VIPUser-getLockCategories"), 'fakehash-1', 'outro', 'fake1-reason', 'b05a20424f24a53dac1b059fb78d861ba9723645026be2174c93a94f9106bb35']);
await db.prepare("run", insertLockCategoryQuery, [getHash("VIPUser-getLockCategories"), 'fakehash-2', 'intro', 'fake2-longer-reason', 'b05acd1cd6ec7dffe5ffea64ada91ae7469d6db2ce21c7e30ad7fa62075d450']);
await db.prepare("run", insertLockCategoryQuery, [getHash("VIPUser-getLockCategories"), 'fakehash-2', 'preview', 'fake2-short', 'b05acd1cd6ec7dffe5ffea64ada91ae7469d6db2ce21c7e30ad7fa62075d450']);
});
it('Database should be greater or equal to version 18', async () => {
const version = (await db.prepare('get', 'SELECT key, value FROM config where key = ?', ['version'])).value;
if (version >= 18) return;
else return 'Version isn\'t greater than 18. Version is ' + version;
if (version >= 20) return;
else return 'Version isn\'t greater than 20. Version is ' + version;
});
it('Should be able to get multiple locks in one object', (done: Done) => {
@@ -45,6 +45,8 @@ describe('getLockCategoriesByHash', () => {
done(`Returned incorrect category "${data[0].categories[0]}"`);
} else if (data[0].categories[1] !== "interaction") {
done(`Returned incorrect category "${data[0].categories[1]}"`);
} else if (data[0].reason !== "1-longer-reason") {
done(`Returned incorrect reason "${data[0].reason}"`);
} else {
done(); // pass
}
@@ -70,6 +72,8 @@ describe('getLockCategoriesByHash', () => {
done(`Returned incorrect number of categories "${data[0].categories.length}"`);
} else if (data[0].categories[0] !== "preview") {
done(`Returned incorrect category "${data[0].categories[0]}"`);
} else if (data[0].reason !== "2-reason") {
done(`Returned incorrect reason "${data[0].reason}"`);
} else {
done(); // pass
}
@@ -95,6 +99,8 @@ describe('getLockCategoriesByHash', () => {
done(`Returned incorrect number of categories "${data[0].categories.length}"`);
} else if (data[0].categories[0] !== "nonmusic") {
done(`Returned incorrect category "${data[0].categories[0]}"`);
} else if (data[0].reason !== "3-reason") {
done(`Returned incorrect reason "${data[0].reason}"`);
} else {
done(); // pass
}
@@ -130,6 +136,10 @@ describe('getLockCategoriesByHash', () => {
done(`Returned incorrect category "${data[1].category}"`);
} else if (data[1].categories[1] !== "preview") {
done(`Returned incorrect category "${data[1].category}"`);
} else if (data[0].reason !== "fake1-reason") {
done(`Returned incorrect reason "${data[0].reason}"`);
} else if (data[1].reason !== "fake2-longer-reason") {
done(`Returned incorrect reason "${data[1].reason}"`);
} else {
done(); // pass
}