Created
July 10, 2015 13:25
-
-
Save moduscreate/3d9c59ff5d6bc7c607b6 to your computer and use it in GitHub Desktop.
This file contains hidden or 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