Skip to content

Instantly share code, notes, and snippets.

@mcky
Last active August 29, 2015 14:20
Show Gist options
  • Save mcky/c7ecf71f86210d3bf0f2 to your computer and use it in GitHub Desktop.
Save mcky/c7ecf71f86210d3bf0f2 to your computer and use it in GitHub Desktop.
{
"text":"project title",
"stakeholders":[
{
"text":"a stakeholder",
"outcomes":[
{
"text":"Another outcome",
"indicators":[
{
"text":"more indicators"
},
{
"text":"another indicator"
}
]
},
{
"text":"outcome one",
"indicators":[
{
"text":"more text"
},
{
"text":"indicator one"
},
{
"text":"indicator two"
},
{
"text":"indicator three"
}
]
}
]
}
],
"dateAdded":"2015-05-06T17:22:58.343Z"
}
async.each(stakeholders, function(stakeholder, stakeholderCallback) {
makeStakeholder(project, stakeholder, user, stakeholderCallback)
}, function(err) {
callback(null, project, user)
})
/////////////////
makeIndicator = function(indicator, outcome, user, callback) {
var newIndicator = new Indicator({
text: indicator.text
, parent: outcome._id
, ownedBy: user._id
})
newIndicator.save(function(err, savedIndicator) {
outcome.indicators.push(savedIndicator)
outcome.save()
callback(null)
})
}
makeOutcome = function(outcome, stakeholder, user, callback) {
var newOutcome = new Outcome({
text: outcome.text
, parent: stakeholder._id
, ownedBy: user._id
})
newOutcome.save(function(err, savedOutcome) {
async.series([
function(seriesCallback) {
var indicators = outcome.indicators
async.each(indicators, function(indicator, indicatorCallback) {
makeIndicator(indicator, savedOutcome, user, indicatorCallback)
}, function(err) {
seriesCallback(null)
})
},
function(seriesCallback) {
stakeholder.outcomes.push(savedOutcome)
stakeholder.save()
seriesCallback(null)
callback(null)
}
])
})
}
makeStakeholder = function(project, stakeholder, user, callback) {
var newStakeholder = new Stakeholder({
text: stakeholder.text
, parent: project._id
, ownedBy: user._id
})
newStakeholder.save(function(err, savedStakeholder) {
async.series([
function(seriesCallback) {
var outcomes = stakeholder.outcomes
async.each(outcomes, function(outcome, outcomeCallback) {
makeOutcome(outcome, savedStakeholder, user, outcomeCallback)
}, function(err) {
seriesCallback(null)
})
},
function(seriesCallback) {
project.stakeholders.push(savedStakeholder)
project.save()
seriesCallback(null)
callback(null)
}
])
})
}
var StakeholderSchema = new Schema({
text: String
, outcomes : [{ type: Schema.ObjectId, ref: 'Outcome' }]
, ownedBy: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
}
, parent: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Project'
}
})
var OutcomeSchema = new Schema({
text: String
, indicators : [{ type: Schema.ObjectId, ref: 'Indicator' }]
, ownedBy: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
}
, parent: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Stakeholder'
}
})
var IndicatorSchema = new Schema({
text: String
, ownedBy: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
}
, parent: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Outcome'
}
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment