easy endpoint to get multiple rocketeers

This commit is contained in:
Mentor Palokaj 2021-12-07 15:01:11 +01:00
parent a578cf071f
commit e47a1054b7
3 changed files with 55 additions and 4 deletions

View File

@ -1,6 +1,6 @@
const app = require( './express' )()
const { getTotalSupply } = require( '../modules/contract' )
const { safelyReturnRocketeer, web2domain } = require( '../nft-media/rocketeer' )
const { safelyReturnRocketeer, web2domain, safelyReturnMultipleRocketeers } = require( '../nft-media/rocketeer' )
const { setAvatar, resetAvatar } = require( '../integrations/avatar' )
const { generateNewOutfit, setPrimaryOutfit } = require( '../integrations/changingroom' )
@ -40,6 +40,24 @@ app.get( '/api/rocketeer/:id', async ( req, res ) => {
} )
app.get( '/api/rocketeers/', async ( req, res ) => {
try {
// Parse the request
let { ids } = req.query
ids = ids.split( ',' )
if( ids.length > 100 ) throw new Error( 'Please do not ask for so much data at once :)' )
const rocketeers = await safelyReturnMultipleRocketeers( ids, 'testnet' )
return res.json( rocketeers )
} catch( e ) {
return res.json( { error: e.message || e.toString() } )
}
} )
/* ///////////////////////////////
// VGR's dashboard integration
// /////////////////////////////*/

View File

@ -1,6 +1,6 @@
const app = require( './express' )()
const { getTotalSupply } = require( '../modules/contract' )
const { safelyReturnRocketeer, web2domain } = require( '../nft-media/rocketeer' )
const { safelyReturnRocketeer, web2domain, safelyReturnMultipleRocketeers } = require( '../nft-media/rocketeer' )
const { generateNewOutfit, setPrimaryOutfit } = require( '../integrations/changingroom' )
////////////////////////////////
@ -39,6 +39,24 @@ app.get( '/testnetapi/rocketeer/:id', async ( req, res ) => {
} )
app.get( '/testnetapi/rocketeers/', async ( req, res ) => {
try {
// Parse the request
let { ids } = req.query
ids = ids.split( ',' )
if( ids.length > 100 ) throw new Error( 'Please do not ask for so much data at once :)' )
const rocketeers = await safelyReturnMultipleRocketeers( ids, 'testnet' )
return res.json( rocketeers )
} catch( e ) {
return res.json( { error: e.message || e.toString() } )
}
} )
/* ///////////////////////////////
// Changing room endpoints
// /////////////////////////////*/

View File

@ -149,7 +149,22 @@ async function safelyReturnRocketeer( id, network ) {
}
module.exports = {
web2domain: web2domain,
safelyReturnRocketeer: safelyReturnRocketeer
async function safelyReturnMultipleRocketeers( ids=[], network='mainnet' ) {
// Chech if this is an illegal ID
const invalidIds = await Promise.all( ids.map( id => isInvalidRocketeerId( id, network ) ) )
if( invalidIds.includes( true ) ) throw invalidIds
// Get old rocketeers
const rocketeers = await Promise.all( ids.map( id => getExistingRocketeer( id ) ) )
// Send back an array of rocketeers, but not any failed ones
return rocketeers.filter( rocketeer => rocketeer )
}
module.exports = {
web2domain,
safelyReturnRocketeer,
safelyReturnMultipleRocketeers
}