spee.ch/server/controllers/api/claim/publish/publish.js

93 lines
3.1 KiB
JavaScript
Raw Normal View History

const logger = require('winston');
const db = require('server/models');
const { publishClaim } = require('server/lbrynet');
const { createFileRecordDataAfterPublish } = require('server/models/utils/createFileRecordData.js');
const {
createClaimRecordDataAfterPublish,
} = require('server/models/utils/createClaimRecordData.js');
const deleteFile = require('./deleteFile.js');
2018-11-07 23:51:06 +01:00
const publish = async (publishParams, fileName, fileType) => {
let publishResults;
let channel;
let fileRecord;
2018-11-07 23:51:06 +01:00
let newFile = Boolean(publishParams.file_path);
2019-05-24 22:39:46 +02:00
let publishResultsOutput;
try {
publishResults = await publishClaim(publishParams);
2019-05-24 22:39:46 +02:00
publishResultsOutput = publishResults && publishResults.outputs && publishResults.outputs[0];
logger.verbose(`Successfully published ${publishParams.name} ${fileName}`, publishResults);
2019-05-24 22:39:46 +02:00
const outpoint = `${publishResultsOutput.txid}:${publishResultsOutput.nout}`;
// get the channel information
2019-05-24 22:39:46 +02:00
// if (publishParams.channel_name) {
// logger.debug(`this claim was published in channel: ${publishParams.channel_name}`);
// channel = await db.Channel.findOne({
// where: {
// channelName: publishParams.channel_name,
// },
// });
// } else {
// channel = null;
// }
const certificateId = publishResultsOutput.signing_channel
? publishResultsOutput.signing_channel.claim_id
: null;
const channelName = publishResultsOutput.signing_channel
? publishResultsOutput.signing_channel.name
: null;
const claimRecord = await createClaimRecordDataAfterPublish(
certificateId,
channelName,
fileName,
fileType,
publishParams,
2019-05-24 22:39:46 +02:00
publishResultsOutput
);
const { claimId } = claimRecord;
const upsertCriteria = { name: publishParams.name, claimId };
if (newFile) {
2018-11-07 23:51:06 +01:00
// this is the problem
//
fileRecord = await createFileRecordDataAfterPublish(
fileName,
fileType,
publishParams,
2019-05-24 22:39:46 +02:00
publishResultsOutput
);
} else {
fileRecord = await db.File.findOne({ where: { claimId } }).then(result => result.dataValues);
}
const [file, claim] = await Promise.all([
db.upsert(db.File, fileRecord, upsertCriteria, 'File'),
db.upsert(db.Claim, claimRecord, upsertCriteria, 'Claim'),
]);
logger.debug(`File and Claim records successfully created (${publishParams.name})`);
await Promise.all([file.setClaim(claim), claim.setFile(file)]);
logger.debug(`File and Claim records successfully associated (${publishParams.name})`);
return Object.assign({}, claimRecord, { outpoint });
} catch (err) {
// parse daemon response when err is a string
// this needs work
logger.error('publish/publish err:', err);
const error = typeof err === 'string' ? JSON.parse(err) : err;
2018-11-07 23:51:06 +01:00
if (publishParams.file_path) {
await deleteFile(publishParams.file_path);
}
const message =
error.error && error.error.message ? error.error.message : 'Unknown publish error';
return {
error: true,
message,
};
}
};
module.exports = publish;