updated serve's get process to use local resolve

This commit is contained in:
bill bittner 2017-08-16 12:23:02 -07:00
parent dd762ec10b
commit ed68514b8f
2 changed files with 53 additions and 37 deletions

View file

@ -1,8 +1,7 @@
const lbryApi = require('../helpers/lbryApi.js'); const lbryApi = require('../helpers/lbryApi.js');
const db = require('../models'); const db = require('../models');
const logger = require('winston'); const logger = require('winston');
const isFreeClaim = require('../helpers/functions/isFreeClaim.js'); const { getTopFreeClaim, getFullClaimIdFromShortId, resolveAgainstClaimTable } = require('../helpers/serveHelpers.js');
const { getTopFreeClaim, getFullClaimIdFromShortId } = require('../helpers/serveHelpers.js');
function checkForLocalAssetByClaimId (claimId, name) { function checkForLocalAssetByClaimId (claimId, name) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
@ -39,43 +38,42 @@ function getAssetByClaimId (fullClaimId, name) {
// 1. check locally for claim // 1. check locally for claim
checkForLocalAssetByClaimId(fullClaimId, name) checkForLocalAssetByClaimId(fullClaimId, name)
.then(dataValues => { .then(dataValues => {
// 2. if a result was found, return the result // if a result was found, return early with the result
if (dataValues) { if (dataValues) {
logger.debug('found a local file for this name and claimId'); logger.debug('found a local file for this name and claimId');
resolve(dataValues); return resolve(dataValues);
// 2. if not found locally, make a get request }
} else { logger.debug('no local file found for this name and claimId');
logger.debug('no local file for this name and claimId'); // 2. if no local claim, resolve and get the claim
// 3. resolve the claim resolveAgainstClaimTable(name, fullClaimId)
lbryApi.resolveUri(`${name}#${fullClaimId}`) // USE A LOCAL RESOLVE HERE .then(resolveResult => {
.then(resolveResult => { logger.debug('resolve result >> ', resolveResult);
logger.debug('resolve result >> ', resolveResult); // if no result, return early (claim doesn't exist or isn't free)
// if the claim is free... if (!resolveResult) {
if (resolveResult.claim && isFreeClaim(resolveResult.claim)) { return resolve(null);
// get the claim }
lbryApi.getClaim(`${name}#${fullClaimId}`) let fileRecord = {};
.then(getResult => { // get the claim
logger.debug('getResult >>', getResult); lbryApi.getClaim(`${name}#${fullClaimId}`)
let fileInfo = formatGetResultsToFileInfo(getResult); .then(getResult => {
fileInfo['address'] = resolveResult.claim.address; logger.debug('getResult >>', getResult);
fileInfo['height'] = resolveResult.claim.height; fileRecord = formatGetResultsToFileInfo(getResult);
// insert a record in the File table fileRecord['address'] = (resolveResult.address || 0);
db.File.create(fileInfo); fileRecord['height'] = resolveResult.height;
// resolve the promise // insert a record in the File table & Update Claim table
resolve(fileInfo); return db.File.create(fileRecord);
}) })
.catch(error => { .then(fileRecordResults => {
reject(error); logger.debug('File record successfully updated');
}); resolve(fileRecord);
// if not, resolve with no claims
} else {
resolve(null);
}
}) })
.catch(error => { .catch(error => {
reject(error); reject(error);
}); });
} })
.catch(error => {
reject(error);
});
}) })
.catch(error => { .catch(error => {
reject(error); reject(error);

View file

@ -127,9 +127,9 @@ module.exports = {
}); });
}); });
}, },
getAllFreeClaims (claimName) { getAllFreeClaims (name) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
db.sequelize.query(`SELECT * FROM Claim WHERE name = '${claimName}' ORDER BY amount DESC, height ASC`, { type: db.sequelize.QueryTypes.SELECT }) db.sequelize.query(`SELECT * FROM Claim WHERE name = '${name}' ORDER BY amount DESC, height ASC`, { type: db.sequelize.QueryTypes.SELECT })
.then(result => { .then(result => {
switch (result.length) { switch (result.length) {
case 0: case 0:
@ -143,9 +143,9 @@ module.exports = {
}); });
}); });
}, },
getTopFreeClaim (claimName) { getTopFreeClaim (name) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
db.sequelize.query(`SELECT * FROM Claim WHERE name = '${claimName}' ORDER BY amount DESC, height ASC LIMIT 1`, { type: db.sequelize.QueryTypes.SELECT }) db.sequelize.query(`SELECT * FROM Claim WHERE name = '${name}' ORDER BY amount DESC, height ASC LIMIT 1`, { type: db.sequelize.QueryTypes.SELECT })
.then(result => { .then(result => {
switch (result.length) { switch (result.length) {
case 0: case 0:
@ -159,4 +159,22 @@ module.exports = {
}); });
}); });
}, },
resolveAgainstClaimTable (name, claimId) {
return new Promise((resolve, reject) => {
db.sequelize.query(`SELECT * FROM Claim WHERE name = '${name}' AND claimId = '${claimId}'`, { type: db.sequelize.QueryTypes.SELECT })
.then(result => {
switch (result.length) {
case 0:
return resolve(null);
case 1:
return resolve(result[0]);
default:
return new Error('more than one entry matches that name and claimID');
}
})
.catch(error => {
reject(error);
});
});
},
}; };