From 7a21513a8d57afe3d4ed63dd167dd82a4d1733ed Mon Sep 17 00:00:00 2001 From: Jordan Eldredge Date: Tue, 17 Aug 2021 01:30:57 -0400 Subject: [PATCH] Random improvements to skins database --- .../api/__tests__/router.test.ts | 6 ++++++ packages/skin-database/api/app.ts | 1 + packages/skin-database/api/router.ts | 19 +++++++++++++++++++ .../data/__tests__/skins.test.ts | 6 ++++++ packages/skin-database/data/skins.ts | 8 ++++++-- 5 files changed, 38 insertions(+), 2 deletions(-) diff --git a/packages/skin-database/api/__tests__/router.test.ts b/packages/skin-database/api/__tests__/router.test.ts index c7b3f598..0b87cd59 100644 --- a/packages/skin-database/api/__tests__/router.test.ts +++ b/packages/skin-database/api/__tests__/router.test.ts @@ -341,26 +341,32 @@ test("/stylegan.json", async () => { Array [ Object { "fileName": "Zelda_Amp_3.wsz", + "nsfw": false, "url": "https://cdn.webampskins.org/screenshots/48bbdbbeb03d347e59b1eebda4d352d0.png", }, Object { "fileName": "path.wsz", + "nsfw": false, "url": "https://cdn.webampskins.org/screenshots/a_fake_md5.png", }, Object { "fileName": "nsfw.wsz", + "nsfw": true, "url": "https://cdn.webampskins.org/screenshots/a_nsfw_md5.png", }, Object { "fileName": "rejected.wsz", + "nsfw": false, "url": "https://cdn.webampskins.org/screenshots/a_rejected_md5.png", }, Object { "fileName": "tweeted.wsz", + "nsfw": false, "url": "https://cdn.webampskins.org/screenshots/a_tweeted_md5.png", }, Object { "fileName": "approved.wsz", + "nsfw": false, "url": "https://cdn.webampskins.org/screenshots/an_approved_md5.png", }, ] diff --git a/packages/skin-database/api/app.ts b/packages/skin-database/api/app.ts index 82a53a03..ea778974 100644 --- a/packages/skin-database/api/app.ts +++ b/packages/skin-database/api/app.ts @@ -153,6 +153,7 @@ async function getSitemapUrls() { const allowList = [ /https:\/\/skins\.webamp\.org/, + /https:\/\/winamp-skin-museum\.pages\.dev/, /http:\/\/localhost:3000/, /netlify.app/, ]; diff --git a/packages/skin-database/api/router.ts b/packages/skin-database/api/router.ts index 8f95e21f..f9984e6e 100644 --- a/packages/skin-database/api/router.ts +++ b/packages/skin-database/api/router.ts @@ -139,6 +139,25 @@ router.get( }) ); +router.get( + "/skins/:md5/metadata", + asyncHandler(async (req, res) => { + const { md5 } = req.params; + const skin = await SkinModel.fromMd5(req.ctx, md5); + if (skin == null) { + req.log(`Details for hash "${md5}" NOT FOUND`); + res.status(404).json(); + return; + } + res.json({ + md5: skin.getMd5(), + nsfw: await skin.getIsNsfw(), + fileName: await skin.getFileName(), + readme: skin.getReadme(), + }); + }) +); + router.get( "/skins/:md5/debug", asyncHandler(async (req, res) => { diff --git a/packages/skin-database/data/__tests__/skins.test.ts b/packages/skin-database/data/__tests__/skins.test.ts index ad17d4fd..22bcb248 100644 --- a/packages/skin-database/data/__tests__/skins.test.ts +++ b/packages/skin-database/data/__tests__/skins.test.ts @@ -78,26 +78,32 @@ describe("seeded", () => { Array [ Object { "fileName": "Zelda_Amp_3.wsz", + "nsfw": false, "url": "https://cdn.webampskins.org/screenshots/48bbdbbeb03d347e59b1eebda4d352d0.png", }, Object { "fileName": "path.wsz", + "nsfw": false, "url": "https://cdn.webampskins.org/screenshots/a_fake_md5.png", }, Object { "fileName": "nsfw.wsz", + "nsfw": true, "url": "https://cdn.webampskins.org/screenshots/a_nsfw_md5.png", }, Object { "fileName": "rejected.wsz", + "nsfw": false, "url": "https://cdn.webampskins.org/screenshots/a_rejected_md5.png", }, Object { "fileName": "tweeted.wsz", + "nsfw": false, "url": "https://cdn.webampskins.org/screenshots/a_tweeted_md5.png", }, Object { "fileName": "approved.wsz", + "nsfw": false, "url": "https://cdn.webampskins.org/screenshots/an_approved_md5.png", }, ] diff --git a/packages/skin-database/data/skins.ts b/packages/skin-database/data/skins.ts index fef4cb8f..560513cc 100644 --- a/packages/skin-database/data/skins.ts +++ b/packages/skin-database/data/skins.ts @@ -584,16 +584,20 @@ export async function getAllClassicScreenshotUrls(): Promise< const skins = await knex.raw( ` SELECT skins.md5, - files.file_path + files.file_path, + skin_reviews.review FROM skins LEFT JOIN files ON files.skin_md5 = skins.md5 + LEFT JOIN skin_reviews ON skin_reviews.skin_md5 = skins.md5 AND skin_reviews.review = "NSFW" WHERE skin_type = 1 GROUP BY skins.md5`, [] ); - return skins.map(({ md5, file_path }) => { + return skins.map(({ md5, file_path, review }) => { return { + md5, + nsfw: review != null, fileName: path.basename(file_path), url: getScreenshotUrl(md5), };