From 6e85f150b681fa82740c6b6d832f915a07cef189 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Tue, 23 Dec 2014 20:32:46 +0100 Subject: [PATCH] Revert "[backport] Mixing resolve, get project, get user and roles in the same request" This reverts commit d7c89b7535cc9cff8b43a2deb8d0d7e3fa89b2a6. --- app/coffee/modules/backlog/main.coffee | 14 ++-- app/coffee/modules/controllerMixins.coffee | 20 +++--- app/coffee/modules/issues/detail.coffee | 22 ++++--- app/coffee/modules/issues/list.coffee | 15 +++-- app/coffee/modules/kanban/main.coffee | 15 +++-- app/coffee/modules/resources/issues.coffee | 3 - app/coffee/modules/resources/projects.coffee | 3 - app/coffee/modules/resources/tasks.coffee | 3 - .../modules/resources/userstories.coffee | 3 - app/coffee/modules/resources/wiki.coffee | 3 - app/coffee/modules/search.coffee | 11 ++-- app/coffee/modules/tasks/detail.coffee | 12 +--- app/coffee/modules/team/main.coffee | 15 +++-- app/coffee/modules/userstories/detail.coffee | 24 ++++--- app/coffee/modules/wiki/main.coffee | 64 ++++++++++++------- 15 files changed, 125 insertions(+), 102 deletions(-) diff --git a/app/coffee/modules/backlog/main.coffee b/app/coffee/modules/backlog/main.coffee index a6374a2c..5feb2e91 100644 --- a/app/coffee/modules/backlog/main.coffee +++ b/app/coffee/modules/backlog/main.coffee @@ -200,7 +200,7 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F ]) loadProject: -> - return @rs.projects.getBySlug(@params.pslug).then (project) => + return @rs.projects.get(@scope.projectId).then (project) => @scope.project = project @scope.$emit('project:loaded', project) @scope.points = _.sortBy(project.points, "order") @@ -210,13 +210,15 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F return project loadInitialData: -> - promise = @.loadProject() - promise.then (project) => - @scope.projectId = project.id - @.fillUsersAndRoles(project.users, project.roles) + # Resolve project slug + promise = @repo.resolve({pslug: @params.pslug}).then (data) => + @scope.projectId = data.project @.initializeSubscription() + return data - return promise.then(=> @.loadBacklog()) + return promise.then(=> @.loadProject()) + .then(=> @.loadUsersAndRoles()) + .then(=> @.loadBacklog()) filterVisibleUserstories: -> @scope.visibleUserstories = [] diff --git a/app/coffee/modules/controllerMixins.coffee b/app/coffee/modules/controllerMixins.coffee index fdf176e3..860e3777 100644 --- a/app/coffee/modules/controllerMixins.coffee +++ b/app/coffee/modules/controllerMixins.coffee @@ -32,15 +32,6 @@ toString = @.taiga.toString ############################################################################# class PageMixin - fillUsersAndRoles: (users, roles) -> - @scope.users = _.sortBy(users, "full_name_display") - @scope.usersById = groupBy(@scope.users, (e) -> e.id) - - @scope.roles = _.sortBy(roles, "order") - availableRoles = _(@scope.project.memberships).map("role").uniq().value() - @scope.computableRoles = _(roles).filter("computable") - .filter((x) -> _.contains(availableRoles, x.id)) - .value() loadUsersAndRoles: -> promise = @q.all([ @rs.projects.usersList(@scope.projectId), @@ -49,7 +40,16 @@ class PageMixin return promise.then (results) => [users, roles] = results - @.fillUsersAndRoles(users, roles) + + @scope.users = _.sortBy(users, "full_name_display") + @scope.usersById = groupBy(@scope.users, (e) -> e.id) + + @scope.roles = _.sortBy(roles, "order") + availableRoles = _(@scope.project.memberships).map("role").uniq().value() + @scope.computableRoles = _(roles).filter("computable") + .filter((x) -> _.contains(availableRoles, x.id)) + .value() + return results taiga.PageMixin = PageMixin diff --git a/app/coffee/modules/issues/detail.coffee b/app/coffee/modules/issues/detail.coffee index c0aee649..ff9f2456 100644 --- a/app/coffee/modules/issues/detail.coffee +++ b/app/coffee/modules/issues/detail.coffee @@ -91,7 +91,7 @@ class IssueDetailController extends mixOf(taiga.Controller, taiga.PageMixin) @scope.onDeleteGoToUrl = @navUrls.resolve("project", ctx) loadProject: -> - return @rs.projects.getBySlug(@params.pslug).then (project) => + return @rs.projects.get(@scope.projectId).then (project) => @scope.project = project @scope.$emit('project:loaded', project) @scope.statusList = project.issue_statuses @@ -106,9 +106,8 @@ class IssueDetailController extends mixOf(taiga.Controller, taiga.PageMixin) return project loadIssue: -> - return @rs.issues.getByRef(@scope.projectId, @params.issueref).then (issue) => + return @rs.issues.get(@scope.projectId, @scope.issueId).then (issue) => @scope.issue = issue - @scope.issueId = issue.id @scope.commentModel = issue if @scope.issue.neighbors.previous.ref? @@ -126,12 +125,19 @@ class IssueDetailController extends mixOf(taiga.Controller, taiga.PageMixin) @scope.nextUrl = @navUrls.resolve("project-issues-detail", ctx) loadInitialData: -> - promise = @.loadProject() - return promise.then (project) => - @scope.projectId = project.id - @.fillUsersAndRoles(project.users, project.roles) - @.loadIssue() + params = { + pslug: @params.pslug + issueref: @params.issueref + } + promise = @repo.resolve(params).then (data) => + @scope.projectId = data.project + @scope.issueId = data.issue + return data + + return promise.then(=> @.loadProject()) + .then(=> @.loadUsersAndRoles()) + .then(=> @.loadIssue()) module.controller("IssueDetailController", IssueDetailController) diff --git a/app/coffee/modules/issues/list.coffee b/app/coffee/modules/issues/list.coffee index abcaab35..b08c3ff3 100644 --- a/app/coffee/modules/issues/list.coffee +++ b/app/coffee/modules/issues/list.coffee @@ -91,7 +91,7 @@ class IssuesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi @rs.issues.storeFilters(@params.pslug, @location.search()) loadProject: -> - return @rs.projects.getBySlug(@params.pslug).then (project) => + return @rs.projects.get(@scope.projectId).then (project) => @scope.project = project @scope.$emit('project:loaded', project) @@ -268,12 +268,15 @@ class IssuesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi return data loadInitialData: -> - promise = @.loadProject() - return promise.then (project) => - @scope.projectId = project.id - @.fillUsersAndRoles(project.users, project.roles) + promise = @repo.resolve({pslug: @params.pslug}).then (data) => + @scope.projectId = data.project @.initializeSubscription() - return @q.all([@.loadFilters(), @.loadIssues()]) + return data + + return promise.then(=> @.loadProject()) + .then(=> @.loadUsersAndRoles()) + .then(=> @q.all([@.loadFilters(), + @.loadIssues()])) saveCurrentFiltersTo: (newFilter) -> deferred = @q.defer() diff --git a/app/coffee/modules/kanban/main.coffee b/app/coffee/modules/kanban/main.coffee index 90e657fa..302277c3 100644 --- a/app/coffee/modules/kanban/main.coffee +++ b/app/coffee/modules/kanban/main.coffee @@ -148,7 +148,7 @@ class KanbanController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi ]) loadProject: -> - return @rs.projects.getBySlug(@params.pslug).then (project) => + return @rs.projects.get(@scope.projectId).then (project) => @scope.project = project @scope.points = _.sortBy(project.points, "order") @scope.pointsById = groupBy(project.points, (x) -> x.id) @@ -166,13 +166,16 @@ class KanbanController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi @.loadUserstories() loadInitialData: -> - promise = @.loadProject() - return promise.then (project) => - @scope.projectId = project.id - @.fillUsersAndRoles(project.users, project.roles) + # Resolve project slug + promise = @repo.resolve({pslug: @params.pslug}).then (data) => + @scope.projectId = data.project @.initializeSubscription() - @.loadKanban().then( => @scope.$broadcast("redraw:wip")) + return data + return promise.then(=> @.loadProject()) + .then(=> @.loadUsersAndRoles()) + .then(=> @.loadKanban()) + .then(=> @scope.$broadcast("redraw:wip")) ## View Mode methods diff --git a/app/coffee/modules/resources/issues.coffee b/app/coffee/modules/resources/issues.coffee index c2aab587..46c5bc78 100644 --- a/app/coffee/modules/resources/issues.coffee +++ b/app/coffee/modules/resources/issues.coffee @@ -35,9 +35,6 @@ resourceProvider = ($repo, $http, $urls, $storage, $q) -> params.project = projectId return $repo.queryOne("issues", issueId, params) - service.getByRef = (projectId, ref) -> - return $repo.queryOneRaw("issues", "by_ref?project=#{projectId}&ref=#{ref}") - service.list = (projectId, filters, options) -> params = {project: projectId} params = _.extend({}, params, filters or {}) diff --git a/app/coffee/modules/resources/projects.coffee b/app/coffee/modules/resources/projects.coffee index d8688a6a..ab506262 100644 --- a/app/coffee/modules/resources/projects.coffee +++ b/app/coffee/modules/resources/projects.coffee @@ -28,9 +28,6 @@ resourceProvider = ($repo, $http, $urls) -> service.get = (id) -> return $repo.queryOne("projects", id) - service.getBySlug = (slug) -> - return $repo.queryOneRaw("projects", "by_slug?slug=#{slug}") - service.list = -> return $repo.queryMany("projects") diff --git a/app/coffee/modules/resources/tasks.coffee b/app/coffee/modules/resources/tasks.coffee index f64c6716..3e29f612 100644 --- a/app/coffee/modules/resources/tasks.coffee +++ b/app/coffee/modules/resources/tasks.coffee @@ -35,9 +35,6 @@ resourceProvider = ($repo, $http, $urls, $storage) -> params.project = projectId return $repo.queryOne("tasks", taskId, params) - service.getByRef = (projectId, ref) -> - return $repo.queryOneRaw("tasks", "by_ref?project=#{projectId}&ref=#{ref}") - service.list = (projectId, sprintId=null, userStoryId=null) -> params = {project: projectId} params.milestone = sprintId if sprintId diff --git a/app/coffee/modules/resources/userstories.coffee b/app/coffee/modules/resources/userstories.coffee index f0bb7204..d2c926e4 100644 --- a/app/coffee/modules/resources/userstories.coffee +++ b/app/coffee/modules/resources/userstories.coffee @@ -32,9 +32,6 @@ resourceProvider = ($repo, $http, $urls, $storage) -> params.project = projectId return $repo.queryOne("userstories", usId, params) - service.getByRef = (projectId, ref) -> - return $repo.queryOneRaw("userstories", "by_ref?project=#{projectId}&ref=#{ref}") - service.listUnassigned = (projectId, filters) -> params = {"project": projectId, "milestone": "null"} params = _.extend({}, params, filters or {}) diff --git a/app/coffee/modules/resources/wiki.coffee b/app/coffee/modules/resources/wiki.coffee index 9b150084..6509f795 100644 --- a/app/coffee/modules/resources/wiki.coffee +++ b/app/coffee/modules/resources/wiki.coffee @@ -28,9 +28,6 @@ resourceProvider = ($repo, $http, $urls) -> service.get = (wikiId) -> return $repo.queryOne("wiki", wikiId) - service.getBySlug = (projectId, slug) -> - return $repo.queryOneRaw("wiki", "by_slug?project=#{projectId}&slug=#{slug}") - service.listLinks = (projectId) -> return $repo.queryMany("wiki-links", {project: projectId}) diff --git a/app/coffee/modules/search.coffee b/app/coffee/modules/search.coffee index fc413738..1aa77b20 100644 --- a/app/coffee/modules/search.coffee +++ b/app/coffee/modules/search.coffee @@ -74,7 +74,7 @@ class SearchController extends mixOf(taiga.Controller, taiga.PageMixin) return defered.promise loadProject: -> - return @rs.projects.getBySlug(@params.pslug).then (project) => + return @rs.projects.get(@scope.projectId).then (project) => @scope.project = project @scope.$emit('project:loaded', project) @scope.issueStatusById = groupBy(project.issue_statuses, (x) -> x.id) @@ -94,9 +94,12 @@ class SearchController extends mixOf(taiga.Controller, taiga.PageMixin) return promise loadInitialData: -> - return @.loadProject().then (project) => - @scope.projectId = project.id - @.fillUsersAndRoles(project.users, project.roles) + promise = @repo.resolve({pslug: @params.pslug}).then (data) => + @scope.projectId = data.project + return data + + return promise.then(=> @.loadProject()) + .then(=> @.loadUsersAndRoles()) module.controller("SearchController", SearchController) diff --git a/app/coffee/modules/tasks/detail.coffee b/app/coffee/modules/tasks/detail.coffee index 66c63e4e..0bbe2730 100644 --- a/app/coffee/modules/tasks/detail.coffee +++ b/app/coffee/modules/tasks/detail.coffee @@ -87,7 +87,7 @@ class TaskDetailController extends mixOf(taiga.Controller, taiga.PageMixin) @scope.onDeleteGoToUrl = @navUrls.resolve("project-userstories-detail", ctx) loadProject: -> - return @rs.projects.getBySlug(@params.pslug).then (project) => + return @rs.projects.get(@scope.projectId).then (project) => @scope.project = project @scope.$emit('project:loaded', project) @scope.statusList = project.task_statuses @@ -96,9 +96,8 @@ class TaskDetailController extends mixOf(taiga.Controller, taiga.PageMixin) return project loadTask: -> - return @rs.tasks.getByRef(@scope.projectId, @params.taskref).then (task) => + return @rs.tasks.get(@scope.projectId, @scope.taskId).then (task) => @scope.task = task - @scope.taskId = task.id @scope.commentModel = task if @scope.task.neighbors.previous.ref? @@ -129,7 +128,6 @@ class TaskDetailController extends mixOf(taiga.Controller, taiga.PageMixin) return us loadInitialData: -> - ### params = { pslug: @params.pslug taskref: @params.taskref @@ -144,12 +142,6 @@ class TaskDetailController extends mixOf(taiga.Controller, taiga.PageMixin) .then(=> @.loadUsersAndRoles()) .then(=> @.loadTask().then(=> @q.all([@.loadUserStory(), @.loadSprint()]))) - ### - promise = @.loadProject() - return promise.then (project) => - @scope.projectId = project.id - @.fillUsersAndRoles(project.users, project.roles) - @.loadTask().then(=> @q.all([@.loadSprint(), @.loadUserStory()])) module.controller("TaskDetailController", TaskDetailController) diff --git a/app/coffee/modules/team/main.coffee b/app/coffee/modules/team/main.coffee index bc91a290..7e072cd2 100644 --- a/app/coffee/modules/team/main.coffee +++ b/app/coffee/modules/team/main.coffee @@ -88,7 +88,7 @@ class TeamController extends mixOf(taiga.Controller, taiga.PageMixin) return data loadProject: -> - return @rs.projects.getBySlug(@params.pslug).then (project) => + return @rs.projects.get(@scope.projectId).then (project) => @scope.project = project @scope.$emit('project:loaded', project) @@ -127,11 +127,14 @@ class TeamController extends mixOf(taiga.Controller, taiga.PageMixin) return stats loadInitialData: -> - promise = @.loadProject() - return promise.then (project) => - @scope.projectId = project.id - @.fillUsersAndRoles(project.users, project.roles) - return @.loadMembers().then(=> @.loadMemberStats()) + promise = @repo.resolve({pslug: @params.pslug}).then (data) => + @scope.projectId = data.project + return data + + return promise.then(=> @.loadProject()) + .then(=> @.loadUsersAndRoles()) + .then(=> @.loadMembers()) + .then(=> @.loadMemberStats()) module.controller("TeamController", TeamController) diff --git a/app/coffee/modules/userstories/detail.coffee b/app/coffee/modules/userstories/detail.coffee index 5bc0ff1a..66236dd3 100644 --- a/app/coffee/modules/userstories/detail.coffee +++ b/app/coffee/modules/userstories/detail.coffee @@ -93,7 +93,7 @@ class UserStoryDetailController extends mixOf(taiga.Controller, taiga.PageMixin) @scope.onDeleteGoToUrl = @navUrls.resolve("project-kanban", ctx) loadProject: -> - return @rs.projects.getBySlug(@params.pslug).then (project) => + return @rs.projects.get(@scope.projectId).then (project) => @scope.project = project @scope.$emit('project:loaded', project) @scope.statusList = project.us_statuses @@ -105,9 +105,8 @@ class UserStoryDetailController extends mixOf(taiga.Controller, taiga.PageMixin) return project loadUs: -> - return @rs.userstories.getByRef(@scope.projectId, @params.usref).then (us) => + return @rs.userstories.get(@scope.projectId, @scope.usId).then (us) => @scope.us = us - @scope.usId = us.id @scope.commentModel = us if @scope.us.neighbors.previous.ref? @@ -138,11 +137,20 @@ class UserStoryDetailController extends mixOf(taiga.Controller, taiga.PageMixin) return tasks loadInitialData: -> - promise = @.loadProject() - return promise.then (project) => - @scope.projectId = project.id - @.fillUsersAndRoles(project.users, project.roles) - @.loadUs().then(=> @q.all([@.loadSprint(), @.loadTasks()])) + params = { + pslug: @params.pslug + usref: @params.usref + } + + promise = @repo.resolve(params).then (data) => + @scope.projectId = data.project + @scope.usId = data.us + return data + + return promise.then(=> @.loadProject()) + .then(=> @.loadUsersAndRoles()) + .then(=> @q.all([@.loadUs().then(=> @.loadSprint()), + @.loadTasks()])) module.controller("UserStoryDetailController", UserStoryDetailController) diff --git a/app/coffee/modules/wiki/main.coffee b/app/coffee/modules/wiki/main.coffee index 56cb93e1..2e26befc 100644 --- a/app/coffee/modules/wiki/main.coffee +++ b/app/coffee/modules/wiki/main.coffee @@ -69,43 +69,61 @@ class WikiDetailController extends mixOf(taiga.Controller, taiga.PageMixin) promise.then null, @.onInitialDataError.bind(@) loadProject: -> - return @rs.projects.getBySlug(@params.pslug).then (project) => + return @rs.projects.get(@scope.projectId).then (project) => @scope.project = project @scope.$emit('project:loaded', project) @scope.membersById = groupBy(project.memberships, (x) -> x.user) return project loadWiki: -> - promise = @rs.wiki.getBySlug(@scope.projectId, @params.slug) - promise.then (wiki) => - @scope.wiki = wiki - @scope.wikiId = wiki.id - return @scope.wiki + if @scope.wikiId + return @rs.wiki.get(@scope.wikiId).then (wiki) => + @scope.wiki = wiki + return wiki - promise.then null, (xhr) => - @scope.wikiId = null + if @scope.project.my_permissions.indexOf("add_wiki_page") == -1 + return null - if @scope.project.my_permissions.indexOf("add_wiki_page") == -1 - return null - - data = { - project: @scope.projectId - slug: @scope.wikiSlug - content: "" - } - @scope.wiki = @model.make_model("wiki", data) - return @scope.wiki + data = { + project: @scope.projectId + slug: @scope.wikiSlug + content: "" + } + @scope.wiki = @model.make_model("wiki", data) + return @scope.wiki loadWikiLinks: -> return @rs.wiki.listLinks(@scope.projectId).then (wikiLinks) => @scope.wikiLinks = wikiLinks loadInitialData: -> - promise = @.loadProject() - return promise.then (project) => - @scope.projectId = project.id - @.fillUsersAndRoles(project.users, project.roles) - @q.all([@.loadWikiLinks(), @.loadWiki()]) + params = { + pslug: @params.pslug + wikipage: @params.slug + } + + # Resolve project slug + promise = @repo.resolve({pslug: @params.pslug}).then (data) => + @scope.projectId = data.project + return data + + # Resolve wiki slug + # This should be done in two steps because is not same thing + # not found response for project and not found for wiki page + # and they should be hendled separately. + promise = promise.then => + prom = @repo.resolve({wikipage: @params.slug, pslug: @params.pslug}) + + prom = prom.then (data) => + @scope.wikiId = data.wikipage + + return prom.then null, (xhr) => + @scope.wikiId = null + + return promise.then(=> @.loadProject()) + .then(=> @.loadUsersAndRoles()) + .then(=> @q.all([@.loadWikiLinks(), + @.loadWiki()])) delete: -> # TODO: i18n