lego-db
Version:
Database abstraction over Gaia
192 lines (171 loc) • 7.29 kB
JavaScript
var blockstack = require('blockstack');
const uuidv1 = require('uuid/v1');
var successResponse = {
statusCode: 200,
statusText: 'SUCCESS',
description: null
};
var failureResponse = {
statusCode: 400,
statusText: 'FAILURE',
description: null
};
exports.createStack = createStack;
exports.dropStack = dropStack;
exports.createDocument = createDocument;
exports.findAll = findAll;
function createStack(stackName){
var newStackDetails = {
stackName: stackName,
isActive: true,
createdAt: Date.now()
};
return new Promise((resolve, reject) => {
blockstack.getFile('stackmaster.json', true).then(dat => {
console.log("done " + JSON.parse(dat));
existingStacks = JSON.parse(dat);
existingStacks.map((existingStack) => {
if (existingStack.stackName === stackName) {
console.log('Stack exists.');
failureResponse.description = 'This stack already exists.';
reject(failureResponse);
}
});
existingStacks.push(newStackDetails);
blockstack.putFile(stackName, "", true).then(dat => {
blockstack.putFile('stackmaster.json', JSON.stringify(existingStacks), true).then(dat => {
console.log(dat);
successResponse.description = 'Stack created successfully.';
resolve(successResponse);
}).catch(function (e) {
console.log(e);
failureResponse.description = 'Unable to create stack at the moment.';
reject(failureResponse);
})
}).catch(function(e) {
console.log(e);
failureResponse.description = 'Unable to create stack at the moment.';
reject(failureResponse);
});
}).catch(function (e) {
console.log(e);
blockstack.putFile(stackName, "", true).then(dat => {
blockstack.putFile('stackmaster.json', JSON.stringify(existingStacks), true).then(dat => {
console.log(dat);
successResponse.description = 'Stack created successfully.';
resolve(successResponse);
}).catch(function (e) {
console.log(e);
failureResponse.description = 'Unable to create stack at the moment.';
reject(failureResponse);
})
}).catch(function(e) {
console.log(e);
failureResponse.description = 'Unable to create stack at the moment.';
reject(failureResponse);
});
});
});
}
function dropStack(stackName){
return new Promise((resolve, reject) => {
blockstack.getFile('stackmaster.json', true).then(dat => {
console.log("done " + JSON.parse(dat));
existingStacks = JSON.parse(dat);
existingStacks.map((existingStack) => {
if (existingStack.stackName === stackName) {
console.log('Stack exists.');
existingStack.isActive = false;
blockstack.putFile('stackmaster.json', JSON.stringify(existingStacks), true).then(dat => {
console.log(dat);
successResponse.description = 'Stack dropped successfully.';
resolve(successResponse);
}).catch(function (e) {
console.log(e);
failureResponse.description = 'Unable to drop stack at the moment.';
reject(failureResponse);
})
}
});
failureResponse.description = 'Stack does not exist.';
reject(failureResponse);
}).catch(function (e) {
failureResponse.description = 'No stacks have been created.';
reject(failureResponse);
});
});
}
function createDocument(stackName, documentJson){
documentJson.init.objectId = uuidv1();
documentJson.init.createdAt = Date.now();
documentJson.init.isActive = true;
return new Promise((resolve, reject) => {
blockstack.getFile('stackmaster.json', true).then(dat => {
console.log("done " + JSON.parse(dat));
existingStacks = JSON.parse(dat);
existingStacks.map((existingStack) => {
if (existingStack.stackName === stackName) {
console.log('Stack exists.');
if(existingStack.isActive==false){
failureResponse.description = 'Stack has been deleted.';
reject(failureResponse);
}
blockstack.getFile(stackName, true).then(dat => {
var documents = JSON.parse(dat);
documents.push(documentJson);
blockstack.putFile(stackName, JSON.stringify(documents), true).then(dat => {
console.log(dat);
successResponse.description = 'Document created successfully.';
resolve(successResponse);
}).catch(function (e) {
console.log(e);
failureResponse.description = 'Unable to create document at the moment.';
reject(failureResponse);
});
}).catch(function (e) {
console.log(e);
failureResponse.description = 'Unable to retrive stack at the moment.';
reject(failureResponse);
});
}
});
failureResponse.description = 'Stack does not exist.';
reject(failureResponse);
}).catch(function (e) {
failureResponse.description = 'Unable to fetch stacks at the moment.';
reject(failureResponse);
});
});
}
function findAll(stackName){
return new Promise((resolve, reject) => {
blockstack.getFile('stackmaster.json', true).then(dat => {
console.log("done " + JSON.parse(dat));
existingStacks = JSON.parse(dat);
existingStacks.map((existingStack) => {
if (existingStack.stackName === stackName) {
console.log('Stack exists.');
if(existingStack.isActive==false){
failureResponse.description = 'Stack has been deleted.';
reject(failureResponse);
}
blockstack.getFile(stackName, true).then(dat => {
console.log(dat);
successResponse.description = 'Documents fetched successfully.';
successResponse.documents = JSON.parse(dat);
resolve(successResponse);
}).catch(function (e) {
console.log(e);
failureResponse.description = 'Unable to fetch documents at the moment.';
reject(failureResponse);
});
}
});
failureResponse.description = 'Stack does not exist.';
reject(failureResponse);
}).catch(function (e) {
failureResponse.description = 'No stacks have been created.';
reject(failureResponse);
});
});
}