I find having these in a consistent order makes the services much faster to read. This is the order I’ve generally been using: 1. Category 2. Route 3. Examples 4. Rendering 5. Other helpers (`fetch()`, `transform()`) 6. `handle()`
34 lines
800 B
JavaScript
34 lines
800 B
JavaScript
'use strict'
|
|
|
|
const Joi = require('joi')
|
|
const { BaseJsonService } = require('..')
|
|
const { nonNegativeInteger } = require('../validators')
|
|
|
|
const keywords = ['amo', 'firefox']
|
|
|
|
const schema = Joi.object({
|
|
average_daily_users: nonNegativeInteger,
|
|
current_version: Joi.object({
|
|
version: Joi.string().required(),
|
|
}).required(),
|
|
ratings: Joi.object({
|
|
average: Joi.number().required(),
|
|
}).required(),
|
|
weekly_downloads: nonNegativeInteger,
|
|
}).required()
|
|
|
|
class BaseAmoService extends BaseJsonService {
|
|
static get defaultBadgeData() {
|
|
return { label: 'mozilla add-on' }
|
|
}
|
|
|
|
async fetch({ addonId }) {
|
|
return this._requestJson({
|
|
schema,
|
|
url: `https://addons.mozilla.org/api/v3/addons/addon/${addonId}`,
|
|
})
|
|
}
|
|
}
|
|
|
|
module.exports = { BaseAmoService, keywords }
|