Skip to content

Instantly share code, notes, and snippets.

@moduscreate
Created July 10, 2015 13:25
Show Gist options
  • Save moduscreate/3d9c59ff5d6bc7c607b6 to your computer and use it in GitHub Desktop.
Save moduscreate/3d9c59ff5d6bc7c607b6 to your computer and use it in GitHub Desktop.
/**
* @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