added Claim table with modelwrapper for special functions
This commit is contained in:
parent
965ae1c360
commit
dcaa561e8f
5 changed files with 242 additions and 4 deletions
|
@ -4,6 +4,7 @@ const logger = require('winston');
|
||||||
const getAllFreePublicClaims = require('../helpers/functions/getAllFreePublicClaims.js');
|
const getAllFreePublicClaims = require('../helpers/functions/getAllFreePublicClaims.js');
|
||||||
const isFreeClaim = require('../helpers/functions/isFreeClaim.js');
|
const isFreeClaim = require('../helpers/functions/isFreeClaim.js');
|
||||||
const serveHelpers = require('../helpers/serveHelpers.js');
|
const serveHelpers = require('../helpers/serveHelpers.js');
|
||||||
|
const { createClaimEntryFromLbryResolve } = require('../helpers/claimModelWrapper.js');
|
||||||
|
|
||||||
function checkForLocalAssetByClaimId (claimId, name) {
|
function checkForLocalAssetByClaimId (claimId, name) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
|
@ -39,7 +40,7 @@ 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, resolve the result
|
// 2. if a result was found, return the result
|
||||||
if (dataValues) {
|
if (dataValues) {
|
||||||
logger.debug('found a local file for this claimId');
|
logger.debug('found a local file for this claimId');
|
||||||
resolve(dataValues);
|
resolve(dataValues);
|
||||||
|
@ -49,15 +50,19 @@ function getAssetByClaimId (fullClaimId, name) {
|
||||||
// 3. resolve the claim
|
// 3. resolve the claim
|
||||||
lbryApi.resolveUri(`${name}#${fullClaimId}`)
|
lbryApi.resolveUri(`${name}#${fullClaimId}`)
|
||||||
.then(resolveResult => {
|
.then(resolveResult => {
|
||||||
// if the claim is free and public, then get it
|
// if the claim is free...
|
||||||
if (resolveResult.claim && isFreeClaim(resolveResult.claim)) {
|
if (resolveResult.claim && isFreeClaim(resolveResult.claim)) {
|
||||||
|
// get the claim
|
||||||
lbryApi.getClaim(`${name}#${fullClaimId}`)
|
lbryApi.getClaim(`${name}#${fullClaimId}`)
|
||||||
.then(getResult => {
|
.then(getResult => {
|
||||||
|
// logger.debug('getResult >>', getResult);
|
||||||
let fileInfo = formatGetResultsToFileInfo(getResult);
|
let fileInfo = formatGetResultsToFileInfo(getResult);
|
||||||
fileInfo['address'] = resolveResult.claim.address;
|
fileInfo['address'] = resolveResult.claim.address;
|
||||||
fileInfo['height'] = resolveResult.claim.height;
|
fileInfo['height'] = resolveResult.claim.height;
|
||||||
// insert a record in the File table
|
// insert a record in the File table
|
||||||
db.File.create(fileInfo);
|
db.File.create(fileInfo);
|
||||||
|
// insert a record in the Claim table
|
||||||
|
createClaimEntryFromLbryResolve(resolveResult.claim);
|
||||||
// resolve the promise
|
// resolve the promise
|
||||||
resolve(fileInfo);
|
resolve(fileInfo);
|
||||||
})
|
})
|
||||||
|
|
97
helpers/claimModelWrapper.js
Normal file
97
helpers/claimModelWrapper.js
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
const logger = require('winston');
|
||||||
|
const db = require('../models');
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
getLocalClaimsList (name) {
|
||||||
|
logger.debug(`db.Claim >> Getting claim_list for "${name}"`);
|
||||||
|
return db.Claim.findAll({ name })
|
||||||
|
.then(result => {
|
||||||
|
logger.debug('db.claim result length', result.length);
|
||||||
|
if (result.length >= 1) {
|
||||||
|
console.log('there was a result');
|
||||||
|
result = result.map(claim => {
|
||||||
|
return claim.dataValues;
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
return error;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
resolveLocalUri (name, claimId) {
|
||||||
|
logger.debug(`db.Claim >> Resolving "${name}#${claimId}"`);
|
||||||
|
db.Claim.findAll({ name, claimId })
|
||||||
|
.then(result => {
|
||||||
|
if (result) {
|
||||||
|
if (result.length > 1) {
|
||||||
|
result = result.sort((a, b) => {
|
||||||
|
return (a.dataValues.height < b.dataValues.height);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return result[0].dataValues;
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
return error;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
createClaimEntryFromLbryResolve (claim) {
|
||||||
|
logger.debug('db.Claim >> creating claim entry from lbry resolve');
|
||||||
|
// parse the resolved data
|
||||||
|
let claimData = {};
|
||||||
|
claimData['address'] = claim.address;
|
||||||
|
claimData['amount'] = claim.amount;
|
||||||
|
claimData['claimId'] = claim.claim_id;
|
||||||
|
claimData['claimSequence'] = claim.claim_sequence;
|
||||||
|
claimData['decodedClaim'] = claim.decoded_claim;
|
||||||
|
claimData['depth'] = claim.depth;
|
||||||
|
claimData['effectiveAmount'] = claim.effective_amount;
|
||||||
|
claimData['hasSignature'] = claim.has_signature;
|
||||||
|
claimData['height'] = claim.height;
|
||||||
|
claimData['hex'] = claim.hex;
|
||||||
|
claimData['name'] = claim.name;
|
||||||
|
claimData['nout'] = claim.nout;
|
||||||
|
claimData['txid'] = claim.txid;
|
||||||
|
claimData['validAtHeight'] = claim.valid_at_height;
|
||||||
|
claimData['outpoint'] = `${claim.txid}:${claim.nout}`;
|
||||||
|
if (claim.value) {
|
||||||
|
claimData['claimType'] = claim.value.claimType;
|
||||||
|
if (claim.value.stream) {
|
||||||
|
if (claim.value.stream.metadata) {
|
||||||
|
claimData['author'] = claim.value.stream.metadata.author;
|
||||||
|
claimData['description'] = claim.value.stream.metadata.description;
|
||||||
|
claimData['language'] = claim.value.stream.metadata.language;
|
||||||
|
claimData['licenseUrl'] = claim.value.stream.metadata.licenseUrl;
|
||||||
|
claimData['nsfw'] = claim.value.stream.metadata.nsfw;
|
||||||
|
claimData['preview'] = claim.value.stream.metadata.preview;
|
||||||
|
claimData['thumbnail'] = claim.value.stream.metadata.thumbnail;
|
||||||
|
claimData['title'] = claim.value.stream.metadata.title;
|
||||||
|
claimData['metadataVersion'] = claim.value.stream.metadata.version;
|
||||||
|
}
|
||||||
|
if (claim.value.stream.source) {
|
||||||
|
claimData['contentType'] = claim.value.stream.source.contentType;
|
||||||
|
claimData['source'] = claim.value.stream.source.source;
|
||||||
|
claimData['sourceType'] = claim.value.stream.source.sourceType;
|
||||||
|
claimData['sourceVersion'] = claim.value.stream.source.version;
|
||||||
|
}
|
||||||
|
claimData['streamVersion'] = claim.value.stream.version;
|
||||||
|
}
|
||||||
|
claimData['valueVersion'] = claim.value.version;
|
||||||
|
}
|
||||||
|
// create search criteria
|
||||||
|
const searchCriteria = { name: claimData.name, claimId: claimData.claimId };
|
||||||
|
// create entry in db
|
||||||
|
db.upsert(db.Claim, claimData, searchCriteria)
|
||||||
|
.then(() => {
|
||||||
|
logger.debug('successfully added data to db.Claim');
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
logger.error('Sequelize findOne error', error);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
};
|
136
models/claim.js
Normal file
136
models/claim.js
Normal file
|
@ -0,0 +1,136 @@
|
||||||
|
module.exports = (sequelize, { STRING, BOOLEAN, INTEGER, TEXT, ARRAY, DECIMAL, DOUBLE }) => {
|
||||||
|
const Claim = sequelize.define(
|
||||||
|
'Claim',
|
||||||
|
{
|
||||||
|
address: {
|
||||||
|
type : STRING,
|
||||||
|
allowNull: false,
|
||||||
|
},
|
||||||
|
amount: {
|
||||||
|
type : STRING,
|
||||||
|
allowNull: false,
|
||||||
|
},
|
||||||
|
claimId: {
|
||||||
|
type : STRING,
|
||||||
|
allowNull: false,
|
||||||
|
},
|
||||||
|
claimSequence: {
|
||||||
|
type : INTEGER,
|
||||||
|
allowNull: false,
|
||||||
|
},
|
||||||
|
decodedClaim: {
|
||||||
|
type : BOOLEAN,
|
||||||
|
allowNull: false,
|
||||||
|
},
|
||||||
|
depth: {
|
||||||
|
type : INTEGER,
|
||||||
|
allowNull: false,
|
||||||
|
},
|
||||||
|
effectiveAmount: {
|
||||||
|
type : STRING,
|
||||||
|
allowNull: false,
|
||||||
|
},
|
||||||
|
hasSignature: {
|
||||||
|
type : BOOLEAN,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
height: {
|
||||||
|
type : STRING,
|
||||||
|
default: '0',
|
||||||
|
},
|
||||||
|
hex: {
|
||||||
|
type : TEXT('long'),
|
||||||
|
allowNull: false,
|
||||||
|
},
|
||||||
|
name: {
|
||||||
|
type : STRING,
|
||||||
|
allowNull: false,
|
||||||
|
},
|
||||||
|
nout: {
|
||||||
|
type : INTEGER,
|
||||||
|
allowNull: false,
|
||||||
|
},
|
||||||
|
txid: {
|
||||||
|
type : STRING,
|
||||||
|
allowNull: false,
|
||||||
|
},
|
||||||
|
validAtHeight: {
|
||||||
|
type : STRING,
|
||||||
|
default: null,
|
||||||
|
},
|
||||||
|
outpoint: {
|
||||||
|
type : STRING,
|
||||||
|
allowNull: false,
|
||||||
|
},
|
||||||
|
claimType: {
|
||||||
|
type : STRING,
|
||||||
|
allowNull: false,
|
||||||
|
},
|
||||||
|
author: {
|
||||||
|
type : STRING,
|
||||||
|
default: null,
|
||||||
|
},
|
||||||
|
description: {
|
||||||
|
type : STRING,
|
||||||
|
default: null,
|
||||||
|
},
|
||||||
|
language: {
|
||||||
|
type : STRING,
|
||||||
|
default: null,
|
||||||
|
},
|
||||||
|
licenseUrl: {
|
||||||
|
type : STRING,
|
||||||
|
default: null,
|
||||||
|
},
|
||||||
|
nsfw: {
|
||||||
|
type : BOOLEAN,
|
||||||
|
default: null,
|
||||||
|
},
|
||||||
|
preview: {
|
||||||
|
type : STRING,
|
||||||
|
default: null,
|
||||||
|
},
|
||||||
|
thumbnail: {
|
||||||
|
type : STRING,
|
||||||
|
default: null,
|
||||||
|
},
|
||||||
|
title: {
|
||||||
|
type : STRING,
|
||||||
|
default: null,
|
||||||
|
},
|
||||||
|
metadataVersion: {
|
||||||
|
type : STRING,
|
||||||
|
default: null,
|
||||||
|
},
|
||||||
|
contentType: {
|
||||||
|
type : STRING,
|
||||||
|
default: null,
|
||||||
|
},
|
||||||
|
source: {
|
||||||
|
type : STRING,
|
||||||
|
default: null,
|
||||||
|
},
|
||||||
|
sourceType: {
|
||||||
|
type : STRING,
|
||||||
|
default: null,
|
||||||
|
},
|
||||||
|
sourceVersion: {
|
||||||
|
type : STRING,
|
||||||
|
default: null,
|
||||||
|
},
|
||||||
|
streamVersion: {
|
||||||
|
type : STRING,
|
||||||
|
default: null,
|
||||||
|
},
|
||||||
|
valueVersion: {
|
||||||
|
type : STRING,
|
||||||
|
default: null,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
freezeTableName: true,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
return Claim;
|
||||||
|
};
|
|
@ -132,7 +132,7 @@ app.set('view engine', 'handlebars');
|
||||||
|
|
||||||
// start the server
|
// start the server
|
||||||
db.sequelize
|
db.sequelize
|
||||||
.sync() // sync sequelize
|
.sync({force: true}) // sync sequelize
|
||||||
.then(() => { // get the download directory from the daemon
|
.then(() => { // get the download directory from the daemon
|
||||||
logger.info('Retrieving daemon download directory');
|
logger.info('Retrieving daemon download directory');
|
||||||
return getDownloadDirectory();
|
return getDownloadDirectory();
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
<p>These are all the free, public assets at that claim. You can publish more at <a href="/">spee.ch</a>.</p>
|
<p>These are all the free, public assets at that claim. You can publish more at <a href="/">spee.ch</a>.</p>
|
||||||
{{#each claims}}
|
{{#each claims}}
|
||||||
<div class="all-claims-item">
|
<div class="all-claims-item">
|
||||||
<img class="all-claims-img" src="/{{this.claim_id}}/{{this.name}}/" />
|
<img class="all-claims-img" src="/{{this.claim_id}}/{{this.name}}.test" />
|
||||||
<div class="all-claims-details">
|
<div class="all-claims-details">
|
||||||
<ul style="list-style-type:none">
|
<ul style="list-style-type:none">
|
||||||
<li>claim: {{this.name}}</li>
|
<li>claim: {{this.name}}</li>
|
||||||
|
|
Loading…
Reference in a new issue