Files
shields/services/sourceforge/sourceforge-open-tickets.service.js
2019-11-24 13:13:10 +00:00

67 lines
1.4 KiB
JavaScript

'use strict'
const Joi = require('@hapi/joi')
const { metric } = require('../text-formatters')
const { nonNegativeInteger } = require('../validators')
const { BaseJsonService } = require('..')
const schema = Joi.object({
count: nonNegativeInteger.required(),
}).required()
module.exports = class SourceforgeOpenTickets extends BaseJsonService {
static get category() {
return 'other'
}
static get route() {
return {
base: 'sourceforge/open-tickets',
pattern: ':project/:type(bugs|feature-requests)',
}
}
static get examples() {
return [
{
title: 'Sourceforge Open Tickets',
namedParams: {
type: 'bugs',
project: 'sevenzip',
},
staticPreview: this.render({ count: 1338 }),
},
]
}
static get defaultBadgeData() {
return {
label: 'open tickets',
color: 'blue',
}
}
static render({ count }) {
return {
message: metric(count),
}
}
async fetch({ type, project }) {
const url = `https://sourceforge.net/rest/p/${project}/${type}/search?limit=1&q=status%3Aopen`
return this._requestJson({
schema,
url,
errorMessages: {
404: 'project not found',
},
})
}
async handle({ type, project }) {
const { count } = await this.fetch({ type, project })
return this.constructor.render({ count })
}
}