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:
@@ -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,
|
||||
|
||||
@@ -14,6 +14,8 @@ class Contribution {
|
||||
*/
|
||||
static deserialize(serialized) {
|
||||
let {
|
||||
date,
|
||||
time,
|
||||
kind,
|
||||
description,
|
||||
details,
|
||||
@@ -21,6 +23,8 @@ class Contribution {
|
||||
} = JSON.parse(serialized.toString('utf8'));
|
||||
|
||||
return {
|
||||
date,
|
||||
time,
|
||||
kind,
|
||||
description,
|
||||
details,
|
||||
@@ -38,6 +42,8 @@ class Contribution {
|
||||
static serialize(deserialized) {
|
||||
let {
|
||||
contributorIpfsHash,
|
||||
date,
|
||||
time,
|
||||
kind,
|
||||
description,
|
||||
url,
|
||||
@@ -50,6 +56,8 @@ class Contribution {
|
||||
"contributor": {
|
||||
"ipfs": contributorIpfsHash
|
||||
},
|
||||
date,
|
||||
time,
|
||||
kind,
|
||||
description,
|
||||
"details": details || {}
|
||||
|
||||
Reference in New Issue
Block a user