Resolve channels #150
3 changed files with 54 additions and 22 deletions
|
@ -1,7 +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 { getTopFreeClaim, getFullClaimIdFromShortId, resolveAgainstClaimTable } = require('../helpers/serveHelpers.js');
|
const { getTopFreeClaim, getFullClaimIdFromShortId, resolveAgainstClaimTable, getClaimIdByChannelId } = require('../helpers/serveHelpers.js');
|
||||||
|
|
||||||
I get a little confused sometimes on the line between controller and model responsibilities. But, yes, after looking at it and re-reading some MVC notes, I think that all the database related functions should go in the model. I rearranged as such. I get a little confused sometimes on the line between controller and model responsibilities. But, yes, after looking at it and re-reading some MVC notes, I think that all the database related functions should go in the model. I rearranged as such.
https://github.com/lbryio/spee.ch/commit/af046e9d3655a57bf9cd67d3a67a54d4d44ed802
|
|||||||
function checkForLocalAssetByClaimId (claimId, name) {
|
function checkForLocalAssetByClaimId (claimId, name) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
|
@ -82,14 +82,21 @@ function getAssetByClaimId (fullClaimId, name) {
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
getAssetByChannel (channelName, name) {
|
getAssetByChannel (channelName, channelId, name) {
|
||||||
logger.debug('...getting asset by channel...');
|
if (channelId) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
// temporarily throw error
|
getClaimIdByChannelId(channelId, name)
|
||||||
reject(new Error('channel names are not currently supported'));
|
.then(claimId => {
|
||||||
// get the claim id
|
logger.debug('claim id = ', claimId);
|
||||||
// get the asset by claim Id
|
resolve(getAssetByClaimId(claimId, name));
|
||||||
});
|
})
|
||||||
|
.catch(error => {
|
||||||
|
reject(error);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
return new Error('this is not supported yet');
|
||||||
|
}
|
||||||
},
|
},
|
||||||
getAssetByShortId: function (shortId, name) {
|
getAssetByShortId: function (shortId, name) {
|
||||||
logger.debug('...getting asset by short id...');
|
logger.debug('...getting asset by short id...');
|
||||||
|
|
|
@ -127,6 +127,24 @@ module.exports = {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
getClaimIdByChannelId (channelId, name) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
logger.debug('finding claim id from channel id');
|
||||||
|
db.sequelize.query(`SELECT claimId FROM Claim WHERE name = '${name}' AND certificateId = '${channelId}' LIMIT 1;`, { type: db.sequelize.QueryTypes.SELECT })
|
||||||
|
.then(result => {
|
||||||
|
switch (result.length) {
|
||||||
|
case 0:
|
||||||
|
return reject(new Error('That is an invalid Channel Id'));
|
||||||
|
default: // note results must be sorted
|
||||||
|
logger.debug('found result', result);
|
||||||
|
return resolve(result[0].claimId);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
reject(error);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
getAllFreeClaims (name) {
|
getAllFreeClaims (name) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
db.sequelize.query(`SELECT * FROM Claim WHERE name = '${name}' 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 })
|
||||||
|
|
|
@ -7,19 +7,20 @@ const SERVE = 'SERVE';
|
||||||
const SHOW = 'SHOW';
|
const SHOW = 'SHOW';
|
||||||
const SHOWLITE = 'SHOWLITE';
|
const SHOWLITE = 'SHOWLITE';
|
||||||
const CHANNEL = 'CHANNEL';
|
const CHANNEL = 'CHANNEL';
|
||||||
const SHORTURL = 'SHORTURL';
|
const CLAIM_ID_SHORT = 'CLAIM_ID_SHORT';
|
||||||
const CLAIMID = 'CLAIMID';
|
const CLAIM_ID_LONG = 'CLAIM_ID_LONG';
|
||||||
const NAME = 'NAME';
|
const CLAIM_NAME = 'CLAIM_NAME';
|
||||||
|
const CHANNELID_INDICATOR = ':';
|
||||||
|
|
||||||
function getAsset (claimType, channelName, shortId, fullClaimId, name) {
|
function getAsset (claimType, channelName, channelId, shortId, fullClaimId, name) {
|
||||||
switch (claimType) {
|
switch (claimType) {
|
||||||
case CHANNEL:
|
case CHANNEL:
|
||||||
return getAssetByChannel(channelName, name);
|
return getAssetByChannel(channelName, channelId, name);
|
||||||
case SHORTURL:
|
case CLAIM_ID_SHORT:
|
||||||
return getAssetByShortId(shortId, name);
|
return getAssetByShortId(shortId, name);
|
||||||
case CLAIMID:
|
case CLAIM_ID_LONG:
|
||||||
return getAssetByClaimId(fullClaimId, name);
|
return getAssetByClaimId(fullClaimId, name);
|
||||||
case NAME:
|
case CLAIM_NAME:
|
||||||
return getAssetByName(name);
|
return getAssetByName(name);
|
||||||
default:
|
default:
|
||||||
return new Error('that claim type was not found');
|
return new Error('that claim type was not found');
|
||||||
|
@ -89,6 +90,7 @@ module.exports = (app) => {
|
||||||
let channelName = null;
|
let channelName = null;
|
||||||
let shortId = null;
|
let shortId = null;
|
||||||
let fullClaimId = null;
|
let fullClaimId = null;
|
||||||
|
let channelId = null;
|
||||||
let method;
|
let method;
|
||||||
let extension;
|
let extension;
|
||||||
// parse the name
|
// parse the name
|
||||||
|
@ -121,24 +123,29 @@ module.exports = (app) => {
|
||||||
logger.debug('method =', method);
|
logger.debug('method =', method);
|
||||||
// parse identifier for whether it is a channel, short url, or claim_id
|
// parse identifier for whether it is a channel, short url, or claim_id
|
||||||
if (identifier.charAt(0) === '@') {
|
if (identifier.charAt(0) === '@') {
|
||||||
channelName = identifier.substring(1);
|
channelName = identifier;
|
||||||
logger.debug('channel name =', channelName);
|
logger.debug('channel name =', channelName);
|
||||||
claimType = CHANNEL;
|
claimType = CHANNEL;
|
||||||
|
const channelIdIndex = channelName.indexOf(CHANNELID_INDICATOR);
|
||||||
|
if (channelIdIndex !== -1) {
|
||||||
|
channelId = channelName.substring(channelIdIndex + 1);
|
||||||
|
channelName = channelName.substring(0, channelIdIndex);
|
||||||
|
}
|
||||||
} else if (identifier.length === 40) {
|
} else if (identifier.length === 40) {
|
||||||
fullClaimId = identifier;
|
fullClaimId = identifier;
|
||||||
logger.debug('full claim id =', fullClaimId);
|
logger.debug('full claim id =', fullClaimId);
|
||||||
claimType = CLAIMID;
|
claimType = CLAIM_ID_LONG;
|
||||||
} else if (identifier.length < 40) {
|
} else if (identifier.length < 40) {
|
||||||
shortId = identifier;
|
shortId = identifier;
|
||||||
logger.debug('short claim id =', shortId);
|
logger.debug('short claim id =', shortId);
|
||||||
claimType = SHORTURL;
|
claimType = CLAIM_ID_SHORT;
|
||||||
} else {
|
} else {
|
||||||
logger.error('The URL provided could not be parsed');
|
logger.error('The URL provided could not be parsed');
|
||||||
res.send('that url is invalid');
|
res.send('that url is invalid');
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
// 1. retrieve the asset and information
|
// 1. retrieve the asset and information
|
||||||
getAsset(claimType, channelName, shortId, fullClaimId, name)
|
getAsset(claimType, channelName, channelId, shortId, fullClaimId, name)
|
||||||
// 2. serve or show
|
// 2. serve or show
|
||||||
.then(fileInfo => {
|
.then(fileInfo => {
|
||||||
logger.debug('fileInfo', fileInfo);
|
logger.debug('fileInfo', fileInfo);
|
||||||
|
@ -179,7 +186,7 @@ module.exports = (app) => {
|
||||||
logger.debug('claim name = ', name);
|
logger.debug('claim name = ', name);
|
||||||
logger.debug('method =', method);
|
logger.debug('method =', method);
|
||||||
// 1. retrieve the asset and information
|
// 1. retrieve the asset and information
|
||||||
getAsset(NAME, null, null, null, name)
|
getAsset(CLAIM_NAME, null, null, null, name)
|
||||||
// 2. serve or show
|
// 2. serve or show
|
||||||
.then(fileInfo => {
|
.then(fileInfo => {
|
||||||
if (!fileInfo) {
|
if (!fileInfo) {
|
||||||
|
|
Loading…
Reference in a new issue
This looks like it could use better organization. I'd be inclined to put a lot of these inside of the
modal
folder, but I'd suggest looking at what other conventions are used in this framework before doing that.