Validate contribution docs against schema

Currently requires an open PR branch for the schemas, which is adding
date and time for contributions.

refs #30
This commit is contained in:
2019-04-10 18:37:02 +02:00
parent 1aae62e139
commit 130e2a7797
5 changed files with 116 additions and 90 deletions

View File

@@ -1,5 +1,20 @@
const ethers = require('ethers');
const schemas = require('kosmos-schemas');
const tv4 = require('tv4');
const validator = tv4.freshApi();
validator.addFormat({
'date': function(value) {
const dateRegexp = /^[0-9]{4,}-[0-9]{2}-[0-9]{2}$/;
return dateRegexp.test(value) ? null : "A valid ISO 8601 full-date string is expected";
},
'time': function(value) {
const timeRegexp = /^([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|60)(\.[0-9]+)?(([Zz])|([\+|\-]([01][0-9]|2[0-3]):[0-5][0-9]))$/;
return timeRegexp.test(value) ? null : "A valid ISO 8601 full-time string is expected";
}
})
const ContributionSerializer = require('../serializers/contribution');
const Base = require('./base');
@@ -48,12 +63,15 @@ class Contribution extends Base {
}
addContribution(contributionAttr, callOptions = {}) {
let json = ContributionSerializer.serialize(contributionAttr);
// TODO: validate against schema
let jsonStr = ContributionSerializer.serialize(contributionAttr);
// Validate JSON document against schema
let result = validator.validate(JSON.parse(jsonStr), schemas['contribution']);
if (!result) { return Promise.reject(validator.error); }
return this.ipfs
.add(json)
.then((ipfsHashAttr) => {
.add(jsonStr)
.then(ipfsHashAttr => {
let contribution = [
contributionAttr.amount,
contributionAttr.contributorId,