From 025a49b715ab9d3ffbeb226b94ec1f1e30bf4e07 Mon Sep 17 00:00:00 2001 From: Pierce Thompson <52843537+Insprill@users.noreply.github.com> Date: Tue, 8 Nov 2022 11:27:06 -0500 Subject: [PATCH] Add [modrinth] followers (#8601) * Add Modrinth followers * Update class names --- ...rvice.js => modrinth-downloads.service.js} | 4 +- ...tester.js => modrinth-downloads.tester.js} | 0 .../modrinth/modrinth-followers.service.js | 49 +++++++++++++++++++ .../modrinth/modrinth-followers.tester.js | 12 +++++ 4 files changed, 63 insertions(+), 2 deletions(-) rename services/modrinth/{modrinth.service.js => modrinth-downloads.service.js} (89%) rename services/modrinth/{modrinth.tester.js => modrinth-downloads.tester.js} (100%) create mode 100644 services/modrinth/modrinth-followers.service.js create mode 100644 services/modrinth/modrinth-followers.tester.js diff --git a/services/modrinth/modrinth.service.js b/services/modrinth/modrinth-downloads.service.js similarity index 89% rename from services/modrinth/modrinth.service.js rename to services/modrinth/modrinth-downloads.service.js index acbf47b905..5ce5ec079d 100644 --- a/services/modrinth/modrinth.service.js +++ b/services/modrinth/modrinth-downloads.service.js @@ -7,7 +7,7 @@ const schema = Joi.object({ downloads: nonNegativeInteger, }).required() -export default class Modrinth extends BaseJsonService { +export default class ModrinthDownloads extends BaseJsonService { static category = 'downloads' static route = { @@ -17,7 +17,7 @@ export default class Modrinth extends BaseJsonService { static examples = [ { - title: 'Modrinth', + title: 'Modrinth Downloads', namedParams: { projectId: 'AANobbMI' }, staticPreview: renderDownloadsBadge({ downloads: 120000 }), }, diff --git a/services/modrinth/modrinth.tester.js b/services/modrinth/modrinth-downloads.tester.js similarity index 100% rename from services/modrinth/modrinth.tester.js rename to services/modrinth/modrinth-downloads.tester.js diff --git a/services/modrinth/modrinth-followers.service.js b/services/modrinth/modrinth-followers.service.js new file mode 100644 index 0000000000..69c1f9d771 --- /dev/null +++ b/services/modrinth/modrinth-followers.service.js @@ -0,0 +1,49 @@ +import Joi from 'joi' +import { metric } from '../text-formatters.js' +import { BaseJsonService } from '../index.js' +import { nonNegativeInteger } from '../validators.js' + +const schema = Joi.object({ + followers: nonNegativeInteger, +}).required() + +export default class ModrinthFollowers extends BaseJsonService { + static category = 'social' + + static route = { + base: 'modrinth/followers', + pattern: ':projectId', + } + + static examples = [ + { + title: 'Modrinth Followers', + namedParams: { projectId: 'AANobbMI' }, + staticPreview: Object.assign(this.render({ followers: 176 }), { + label: 'Followers', + style: 'social', + }), + }, + ] + + static defaultBadgeData = { label: 'followers' } + + static render({ followers }) { + return { + message: metric(followers), + color: 'blue', + } + } + + async fetch({ projectId }) { + return this._requestJson({ + schema, + url: `https://api.modrinth.com/v2/project/${projectId}`, + }) + } + + async handle({ projectId }) { + const { followers } = await this.fetch({ projectId }) + return this.constructor.render({ followers }) + } +} diff --git a/services/modrinth/modrinth-followers.tester.js b/services/modrinth/modrinth-followers.tester.js new file mode 100644 index 0000000000..2e39bc464e --- /dev/null +++ b/services/modrinth/modrinth-followers.tester.js @@ -0,0 +1,12 @@ +import { createServiceTester } from '../tester.js' +import { isMetric } from '../test-validators.js' + +export const t = await createServiceTester() + +t.create('Followers') + .get('/AANobbMI.json') + .expectBadge({ label: 'followers', message: isMetric }) + +t.create('Followers (not found)') + .get('/not-existing.json') + .expectBadge({ label: 'followers', message: 'not found', color: 'red' }) -- GitLab