Created
July 10, 2015 13:25
-
-
Save moduscreate/3d9c59ff5d6bc7c607b6 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* @author Alex Lazar | |
* REST-API definition for Kickstart actions () | |
* */ | |
/*global req, res, require, SQL */ | |
var KickstartStore = require('store/KickstartStore').KickstartStore, | |
ActivityStore = require('store/ActivityStore').ActivityStore, | |
GoalStore = require('store/GoalStore').GoalStore, | |
PersonaStore = require('store/PersonaStore').PersonaStore, | |
PersonaGoalStore = require('store/PersonaGoalStore').PersonaGoalStore, | |
PersonaProblemStore = require('store/PersonaProblemStore').PersonaProblemStore, | |
PersonaJourneyStore = require('store/PersonaJourneyStore').PersonaJourneyStore, | |
PersonaJourneyStageStore = require('store/PersonaJourneyStageStore').PersonaJourneyStageStore, | |
PersonaJourneyStageTaskStore = require('store/PersonaJourneyStageTaskStore').PersonaJourneyStageTaskStore, | |
PersonaAssumptionStore = require('store/PersonaAssumptionStore').PersonaAssumptionStore, | |
PersonaAssumptionQuestionStore = require('store/PersonaAssumptionQuestionStore').PersonaAssumptionQuestionStore, | |
FeedbackUserStore = require('store/FeedbackUserStore').FeedbackUserStore, | |
EndUserStore = require('store/EndUserStore').EndUserStore, | |
NoteStore = require('store/NoteStore').NoteStore, | |
TaskStore = require('store/TaskStore').TaskStore, | |
TaskFlowStore = require('store/TaskFlowStore').TaskFlowStore; | |
return { | |
// GET /v1/kickstarts = list | |
// GET /v1/kickstarts/:id = get user by id | |
'GET' : function (id, item, itemId, subItem, subItemId, sub1Item, sub1ItemId, sub2Item, sub2ItemId) { | |
var req = this.req; | |
if (!req.userId) { | |
this.send(403, 'Permission denied: not logged in'); | |
return; | |
} | |
if (!req.kickstartId && id) { | |
this.send(403, 'Permission denied: no kickstart id'); | |
return; | |
} | |
if (!req.userInKickstart && id) { | |
this.send(403, 'Permission denied: not in kickstart'); | |
return; | |
} | |
SQL.startTransaction(); | |
try { | |
switch (item) { | |
case 'categories': | |
// will handle the stories REST calls of a Kickstart | |
if (itemId) { | |
if (subItem && subItem == "goals") { | |
GoalStore.listGoalsByCategory(this, id, itemId, req.userId); | |
} | |
else { | |
GoalStore.getCategoryById(this, id, itemId, req.userId); | |
} | |
} | |
else { | |
GoalStore.listCategories(this, id, req.userId); | |
} | |
break; | |
case 'goals': | |
// will handle the goals REST calls of a Kickstart | |
if (itemId) { | |
if (subItem && subItem === "activity") { | |
ActivityStore.list(this, 'goal', itemId); | |
} | |
else { | |
GoalStore.getById(this, itemId, null, id, req.userId); | |
} | |
} | |
else { | |
GoalStore.list(this, req.userId, id, null); | |
} | |
break; | |
case 'activity': | |
// kickstart activity listing | |
ActivityStore.list(this, 'kickstart', id); | |
break; | |
case 'feedbackUsers': | |
// will handle the goals REST calls of a Kickstart | |
if (itemId) { | |
if (subItem && subItem == "personas") { | |
if (subItemId) { | |
PersonaStore.getById(this, subItemId, id, req.userId); | |
} | |
else { | |
PersonaStore.listByFeedbackUser(this, itemId, id, req.userId); | |
} | |
} | |
else { | |
FeedbackUserStore.getById(this, itemId, id, req.userId); | |
} | |
} | |
else { | |
FeedbackUserStore.list(this, id, req.userId); | |
} | |
break; | |
// personas | |
case 'personas': | |
// kickstart activity listing | |
if (itemId) { | |
if (subItem && subItem == "goals") { | |
if (subItemId) { | |
PersonaGoalStore.getById(this, subItemId, id, req.userId); | |
} | |
else { | |
PersonaGoalStore.list(this, itemId, id, req.userId); | |
} | |
} | |
else if (subItem && subItem === "problems") { | |
if (subItemId) { | |
PersonaProblemStore.getById(this, subItemId, id, req.userId); | |
} | |
else { | |
PersonaProblemStore.list(this, itemId, id, req.userId); | |
} | |
} | |
else if (subItem && subItem === "journeys") { | |
if (subItemId) { | |
if (sub1Item && sub1Item == "stages") { | |
if (sub1ItemId) { | |
if (sub2Item && sub2Item == "tasks") { | |
if (sub2ItemId) { | |
PersonaJourneyStageTaskStore.getById(this, sub2ItemId, id, req.userId); | |
} | |
else { | |
PersonaJourneyStageTaskStore.list(this, sub1ItemId, id, req.userId); | |
} | |
} | |
else { | |
PersonaJourneyStageStore.getById(this, sub1ItemId, id, req.userId); | |
} | |
} | |
else { | |
PersonaJourneyStageStore.list(this, subItemId, id, req.userId); | |
} | |
} | |
else { | |
PersonaJourneyStore.getById(this, subItemId, id, req.userId); | |
} | |
} | |
else { | |
PersonaJourneyStore.list(this, itemId, id, req.userId); | |
} | |
} | |
else if (subItem && subItem == "notes") { | |
if (subItemId) { | |
NoteStore.getById(this, subItemId); | |
} | |
else { | |
NoteStore.list(this, item, itemId); | |
} | |
} | |
else if (subItem && subItem === "assumptions") { | |
if (subItemId) { | |
if (sub1Item && sub1Item == "questions") { | |
if (sub1ItemId) { | |
if (sub2Item && sub2Item == "answers") { | |
if (sub2ItemId) { | |
//PersonaAssumptionQuestionAnswersStore.getById(this, sub2ItemId, id, req.userId); | |
} | |
else { | |
//PersonaAssumptionQuestionAnswersStore.list(this, sub1ItemId, id, req.userId); | |
} | |
} | |
else { | |
PersonaAssumptionQuestionStore.getById(this, sub1ItemId, id, req.userId); | |
} | |
} | |
else { | |
PersonaAssumptionQuestionStore.list(this, subItemId, id, req.userId); | |
} | |
} | |
else { | |
PersonaAssumptionStore.getById(this, subItemId, id, req.userId); | |
} | |
} | |
else { | |
PersonaAssumptionStore.list(this, itemId, id, req.userId); | |
} | |
} | |
else if (subItem && subItem === "activity") { | |
ActivityStore.list(this, 'persona', itemId); | |
} | |
else if (subItem && subItem === "endUsers") { | |
EndUserStore.listByPersona(this, itemId, id, req.userId); | |
} | |
else if (subItem && subItem === "feedbackUsers") { | |
FeedbackUserStore.listByPersona(this, itemId, id, req.userId); | |
} | |
else { | |
PersonaStore.getById(this, itemId, id, req.userId); | |
} | |
} | |
else { | |
PersonaStore.list(this, id, req.userId); | |
} | |
break; | |
// personas | |
case 'endUsers': | |
// kickstart activity listing | |
if (itemId) { | |
if (subItem && subItem === "activity") { | |
ActivityStore.list(this, 'persona', itemId); | |
} | |
else if (subItem && subItem === "personas") { | |
PersonaStore.listByEndUser(this, itemId, id, req.userId); | |
} | |
else if (subItem && subItem == "notes") { | |
if (subItemId) { | |
NoteStore.getById(this, subItemId); | |
} | |
else { | |
NoteStore.list(this, item, itemId); | |
} | |
} | |
else { | |
EndUserStore.getById(this, itemId, id, req.userId); | |
} | |
} | |
else { | |
EndUserStore.list(this, id, req.userId); | |
} | |
break; | |
case 'taskFlows': | |
// kickstart activity listing | |
if (itemId) { | |
if (subItem && subItem === "activity") { | |
ActivityStore.list(this, 'taskFlows', itemId); | |
} | |
else if (subItem && subItem === "tasks") { | |
if (subItemId) { | |
TaskStore.getById(this, subItemId, id, req.userId); | |
} | |
else { | |
TaskStore.list(this, itemId, id, req.userId); | |
} | |
} | |
else { | |
TaskFlowStore.getById(this, itemId, id, req.userId); | |
} | |
} | |
else { | |
TaskFlowStore.list(this, id, req.userId); | |
} | |
break; | |
default: | |
if (id) { | |
KickstartStore.getById(this, id, req.userId); | |
} | |
else { | |
KickstartStore.list(this, req.userId); | |
} | |
break; | |
} | |
SQL.commit(); | |
} | |
catch (e) { | |
SQL.rollback(); | |
this.exception(e); | |
} | |
}, | |
// PUT /v1/kickstart/:id = update user | |
'PUT' : function (id, item, itemId, subItem, subItemId, sub1Item, sub1ItemId, sub2Item, sub2ItemId) { | |
var req = this.req; | |
if (!req.kickstartId || !req.userId || !req.userInKickstart) { | |
this.send(403, 'Permission denied'); | |
} | |
if (!id) { | |
throw new Error('Invalid arguments'); | |
} | |
SQL.startTransaction(); | |
try { | |
var data = typeof this.req.post === "string" ? JSON.parse(this.req.post) : this.req.post; | |
switch (item) { | |
case 'categories': | |
// will handle the stories REST calls of a Goal Category | |
GoalStore.updateCategory(this, data, itemId); | |
break; | |
case 'goals': | |
// will handle the goals REST calls of a Goal | |
if (itemId) { | |
GoalStore.update(this, itemId, data, req.userId); | |
} | |
else { | |
GoalStore.updateOrder(this, data); | |
} | |
break; | |
case 'personas': | |
// will handle the stories REST calls of a Persona | |
if (itemId) { | |
if (subItem && subItem == "goals") { | |
if (subItemId) { | |
PersonaGoalStore.update(this, subItemId, data, req.userId, itemId, id); | |
} | |
else { | |
PersonaGoalStore.updateOrder(this, data); | |
} | |
} | |
else if (subItem && subItem == "notes") { | |
if (subItemId) { | |
NoteStore.update(this, subItemId, data, item, req.userId, id); | |
} | |
} | |
else if (subItem && subItem == "problems") { | |
if (subItemId) { | |
PersonaProblemStore.update(this, subItemId, data, req.userId, itemId, id); | |
} | |
else { | |
PersonaProblemStore.updateOrder(this, data); | |
} | |
} | |
else if (subItem && subItem == "assumptions") { | |
if (subItemId) { | |
if (sub1Item && sub1Item === "questions") { | |
if (sub1ItemId) { | |
if (sub2Item && sub2Item === "answers") { | |
if (sub2ItemId) { | |
//PersonaAssumptionQuestionAnswersStore.update(this, sub2ItemId, data, req.userId, sub1ItemId, id); | |
} | |
else { | |
//PersonaAssumptionQuestionAnswersStore.updateOrder(this, data, sub1ItemId); | |
} | |
} | |
else { | |
PersonaAssumptionQuestionStore.update(this, sub1ItemId, data, req.userId, subItemId, id); | |
} | |
} | |
else { | |
PersonaAssumptionQuestionStore.updateOrder(this, data); | |
} | |
} | |
else { | |
PersonaAssumptionStore.update(this, subItemId, data, req.userId, itemId, id); | |
} | |
} | |
else { | |
PersonaAssumptionStore.updateOrder(this, data); | |
} | |
} | |
else if (subItem && subItem == "journeys") { | |
if (subItemId) { | |
if (sub1Item && sub1Item === "stages") { | |
if (sub1ItemId) { | |
if (sub2Item && sub2Item === "tasks") { | |
if (sub2ItemId) { | |
PersonaJourneyStageTaskStore.update(this, sub2ItemId, data, req.userId, subItemId, id); | |
} | |
else { | |
PersonaJourneyStageTaskStore.updateOrder(this, data, sub1ItemId); | |
} | |
} | |
else { | |
PersonaJourneyStageStore.update(this, sub1ItemId, data, req.userId, subItemId, id); | |
} | |
} | |
else { | |
PersonaJourneyStageStore.updateOrder(this, data); | |
} | |
} | |
else { | |
PersonaJourneyStore.update(this, subItemId, data, req.userId, itemId, id); | |
} | |
} | |
else { | |
PersonaJourneyStore.updateOrder(this, data); | |
} | |
} | |
else if (subItem && subItem == "endUsers") { | |
PersonaStore.mapEndUsersToPersona(this, itemId, data, req.userId, id); | |
} | |
else if (subItem && subItem == "feedbackUsers") { | |
PersonaStore.mapFeedbackUsersToPersona(this, itemId, data, req.userId, id); | |
} | |
else { | |
PersonaStore.update(this, itemId, data, req.userId, id); | |
} | |
} | |
else { | |
throw new Error('Invalid arguments'); | |
} | |
break; | |
case 'feedbackUsers': | |
// will handle the stories REST calls of an EndUser | |
if (itemId) { | |
if (subItem && subItem == "personas") { | |
FeedbackUserStore.mapPersonasToFeedbackUser(this, itemId, data, req.userId, id); | |
} | |
else { | |
FeedbackUserStore.update(this, itemId, data, id, req.userId); | |
} | |
} | |
else { | |
throw new Error('Invalid arguments'); | |
} | |
break; | |
case 'endUsers': | |
// will handle the stories REST calls of an EndUser | |
if (itemId) { | |
if (subItem && subItem == "personas") { | |
EndUserStore.mapPersonasToEndUser(this, itemId, data, req.userId, id); | |
} | |
else if (subItem && subItem == "notes") { | |
if (subItemId) { | |
NoteStore.update(this, subItemId, data, item, req.userId, id); | |
} | |
} | |
else { | |
EndUserStore.update(this, itemId, data, req.userId, id); | |
} | |
} | |
else { | |
throw new Error('Invalid arguments'); | |
} | |
break; | |
case 'taskFlows': | |
// will handle the stories REST calls of an EndUser | |
if (itemId) { | |
if (subItem && subItem == "tasks") { | |
if (subItemId) { | |
TaskStore.update(this, subItemId, data, item, req.userId, id); | |
} | |
} | |
else { | |
TaskFlowStore.update(this, itemId, data, req.userId, id); | |
} | |
} | |
else { | |
throw new Error('Invalid arguments'); | |
} | |
break; | |
default: | |
KickstartStore.update(this, id, data, req.userId); | |
} | |
SQL.commit(); | |
} | |
catch (e) { | |
SQL.rollback(); | |
this.exception(e); | |
} | |
}, | |
// POST /v1/kickstart = create kickstart | |
'POST' : function (id, item, itemId, subItem, subItemId, sub1Item, sub1ItemId, sub2Item, sub2ItemId) { | |
var req = this.req; | |
if (!req.userId) { | |
this.send(403, 'Permission denied'); | |
return; | |
} | |
if (!req.kickstartId && id) { | |
this.send(403, 'Permission denied'); | |
} | |
if (!req.userInKickstart && id) { | |
this.send(403, 'Permission denied: not in kickstart'); | |
} | |
SQL.startTransaction(); | |
try { | |
var data = typeof this.req.post === "string" ? JSON.parse(this.req.post) : this.req.post; | |
switch (item) { | |
case 'categories': | |
// will handle the stories REST calls of a Kickstart | |
GoalStore.addCategory(this, data, id); | |
break; | |
case 'goals': | |
GoalStore.add(this, data, req.userId, id); | |
break; | |
case 'personas': | |
if (itemId && subItem && subItem == "goals") { | |
PersonaGoalStore.add(this, data, itemId, req.userId, id); | |
} | |
else if (itemId && subItem && subItem == "notes") { | |
NoteStore.add(this, data, item, itemId, req.userId, id); | |
} | |
else if (itemId && subItem && subItem == "problems") { | |
PersonaProblemStore.add(this, data, itemId, req.userId, id); | |
} | |
else if (itemId && subItem && subItem == "assumptions") { | |
if (subItemId) { | |
if (sub1Item && sub1Item === "questions") { | |
if (sub1ItemId) { | |
if (sub1Item && sub1Item === "answers") { | |
//PersonaAssumptionQuestionAnswersStore.add(this, data, sub1ItemId, subItemId, itemId, req.userId, id); | |
} | |
} | |
else { | |
PersonaAssumptionQuestionStore.add(this, data, subItemId, itemId, req.userId, id); | |
} | |
} | |
} | |
else { | |
PersonaAssumptionStore.add(this, data, itemId, req.userId, id); | |
} | |
} | |
else if (itemId && subItem && subItem == "journeys") { | |
if (subItemId) { | |
if (sub1Item && sub1Item === "stages") { | |
if (sub1ItemId) { | |
if (sub1Item && sub1Item === "stages") { | |
PersonaJourneyStageTaskStore.add(this, data, sub1ItemId, subItemId, itemId, req.userId, id); | |
} | |
} | |
else { | |
PersonaJourneyStageStore.add(this, data, subItemId, itemId, req.userId, id); | |
} | |
} | |
} | |
else { | |
PersonaJourneyStore.add(this, data, itemId, req.userId, id); | |
} | |
} | |
else { | |
// will handle the stories REST calls of a Kickstart | |
PersonaStore.add(this, data, req.userId, id); | |
} | |
break; | |
case 'endUsers': | |
if (itemId && subItem && subItem == "notes") { | |
NoteStore.add(this, data, item, itemId, req.userId, id); | |
} | |
else { | |
EndUserStore.add(this, data, req.userId, id); | |
} | |
break; | |
case 'feedbackUsers': | |
data.kickstartId = this.req.kickstartId; | |
FeedbackUserStore.add(this, data, req.userId, id); | |
break; | |
case 'taskFlows': | |
if (itemId && subItem && subItem == "tasks") { | |
TaskStore.add(this, data, item, itemId, req.userId, id); | |
} | |
else { | |
TaskFlowStore.add(this, data, req.userId, id); | |
} | |
break; | |
default: | |
KickstartStore.add(this, data, req.userId); | |
return; | |
} | |
SQL.commit(); | |
} | |
catch (e) { | |
SQL.rollback(); | |
this.exception(e); | |
} | |
}, | |
// DELETE /v1/kickstart/:id | |
'DELETE' : function (id, item, itemId, subItem, subItemId, sub1Item, sub1ItemId, sub2Item, sub2ItemId) { | |
var req = this.req; | |
if (!req.kickstartId || !req.userId || !req.userInKickstart) { | |
this.send(403, 'Permission denied'); | |
return; | |
} | |
if (!id) { | |
throw new Error('Invalid arguments'); | |
} | |
SQL.startTransaction(); | |
try { | |
var data = typeof this.req.post === "string" ? JSON.parse(this.req.post) : this.req.post; | |
switch (item) { | |
case 'categories': | |
// will handle the stories REST calls of a Kickstart | |
GoalStore.removeCategory(this, itemId, req.userId, id); | |
break; | |
case 'goals': | |
GoalStore.remove(this, itemId, req.userId); | |
break; | |
//case 'stories': | |
// UserStoryStore.remove(this, itemId, req.userId); | |
break; | |
case 'personas': | |
if (itemId && subItem && subItem == "goals") { | |
PersonaGoalStore.remove(this, subItemId, req.userId, id); | |
} | |
else if (itemId && subItem && subItem == "problems") { | |
PersonaProblemStore.remove(this, subItemId, req.userId, id); | |
} | |
else if (itemId && subItem && subItem == "assumptions") { | |
if (subItemId) { | |
if (sub1Item && sub1Item === "questions") { | |
if (sub1ItemId) { | |
if (sub2Item && sub2Item === "feedback") { | |
//PersonaAssumptionQuestionAnswersStore.remove(this, sub2ItemId, req.userId, id); | |
} | |
else { | |
PersonaAssumptionQuestionStore.remove(this, sub1ItemId, req.userId, id); | |
} | |
} | |
} | |
else { | |
PersonaAssumptionStore.remove(this, subItemId, req.userId, id); | |
} | |
} | |
} | |
else if (itemId && subItem && subItem == "journeys") { | |
if (subItemId) { | |
if (sub1Item && sub1Item === "stages") { | |
if (sub1ItemId) { | |
if (sub2Item && sub2Item === "tasks") { | |
PersonaJourneyStageTaskStore.remove(this, sub2ItemId, req.userId, id); | |
} | |
else { | |
PersonaJourneyStageStore.remove(this, sub1ItemId, req.userId, id); | |
} | |
} | |
} | |
else { | |
PersonaJourneyStore.remove(this, subItemId, req.userId, id); | |
} | |
} | |
} | |
else if (itemId && subItem && subItem == "notes") { | |
NoteStore.remove(this, subItemId, req.userId, id); | |
} | |
else if (itemId && subItem && subItem == "endUsers") { | |
PersonaStore.removeEndUsersFromPersona(this, itemId, data, req.userId, id); | |
} | |
else { | |
// will handle the stories REST calls of a Kickstart | |
PersonaStore.remove(this, itemId, req.userId, id); | |
} | |
break; | |
case 'endUsers': | |
if (itemId && subItem && subItem == "personas") { | |
EndUserStore.removePersonasFromEndUser(this, itemId, data, req.userId, id); | |
} | |
else if (itemId && subItem && subItem == "notes") { | |
NoteStore.remove(this, subItemId, req.userId, id); | |
} | |
else { | |
EndUserStore.remove(this, itemId, req.userId, id); | |
} | |
break; | |
case 'feedbackUsers': | |
if (itemId && subItem && subItem == "personas") { | |
FeedbackUserStore.removePersonasFromFeedbackUser(this, itemId, data, req.userId, id); | |
} | |
else { | |
FeedbackUserStore.remove(this, itemId, id, req.userId); | |
} | |
break; | |
case 'taskFlows': | |
if (itemId && subItem && subItem == "tasks") { | |
TaskStore.remove(this, subItemId, req.userId, id); | |
} | |
else { | |
TaskFlowStore.remove(this, itemId, req.userId, id); | |
} | |
break; | |
case 'removeUser': | |
KickstartStore.removeUser(this, itemId, id, req.userId); | |
break; | |
default: | |
KickstartStore.remove(this, id, req.userId); | |
break; | |
} | |
SQL.commit(); | |
} | |
catch (e) { | |
SQL.rollback(); | |
this.exception(e); | |
} | |
} | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment