Mixing resolve, get project, get user and roles in the same request

stable
Alejandro Alonso 2014-12-23 12:28:04 +01:00 committed by Jesús Espino
parent a0f5f8d982
commit a0db93a053
15 changed files with 102 additions and 125 deletions

View File

@ -200,7 +200,7 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F
]) ])
loadProject: -> loadProject: ->
return @rs.projects.get(@scope.projectId).then (project) => return @rs.projects.getBySlug(@params.pslug).then (project) =>
@scope.project = project @scope.project = project
@scope.$emit('project:loaded', project) @scope.$emit('project:loaded', project)
@scope.points = _.sortBy(project.points, "order") @scope.points = _.sortBy(project.points, "order")
@ -210,15 +210,13 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F
return project return project
loadInitialData: -> loadInitialData: ->
# Resolve project slug promise = @.loadProject()
promise = @repo.resolve({pslug: @params.pslug}).then (data) => promise.then (project) =>
@scope.projectId = data.project @scope.projectId = project.id
@.fillUsersAndRoles(project.users, project.roles)
@.initializeSubscription() @.initializeSubscription()
return data
return promise.then(=> @.loadProject()) return promise.then(=> @.loadBacklog())
.then(=> @.loadUsersAndRoles())
.then(=> @.loadBacklog())
filterVisibleUserstories: -> filterVisibleUserstories: ->
@scope.visibleUserstories = [] @scope.visibleUserstories = []

View File

@ -32,15 +32,7 @@ toString = @.taiga.toString
############################################################################# #############################################################################
class PageMixin class PageMixin
loadUsersAndRoles: -> fillUsersAndRoles: (users, roles) ->
promise = @q.all([
@rs.projects.usersList(@scope.projectId),
@rs.projects.rolesList(@scope.projectId)
])
return promise.then (results) =>
[users, roles] = results
@scope.users = _.sortBy(users, "full_name_display") @scope.users = _.sortBy(users, "full_name_display")
@scope.usersById = groupBy(@scope.users, (e) -> e.id) @scope.usersById = groupBy(@scope.users, (e) -> e.id)
@ -49,7 +41,15 @@ class PageMixin
@scope.computableRoles = _(roles).filter("computable") @scope.computableRoles = _(roles).filter("computable")
.filter((x) -> _.contains(availableRoles, x.id)) .filter((x) -> _.contains(availableRoles, x.id))
.value() .value()
loadUsersAndRoles: ->
promise = @q.all([
@rs.projects.usersList(@scope.projectId),
@rs.projects.rolesList(@scope.projectId)
])
return promise.then (results) =>
[users, roles] = results
@.fillUsersAndRoles(users, roles)
return results return results
taiga.PageMixin = PageMixin taiga.PageMixin = PageMixin

View File

@ -91,7 +91,7 @@ class IssueDetailController extends mixOf(taiga.Controller, taiga.PageMixin)
@scope.onDeleteGoToUrl = @navUrls.resolve("project", ctx) @scope.onDeleteGoToUrl = @navUrls.resolve("project", ctx)
loadProject: -> loadProject: ->
return @rs.projects.get(@scope.projectId).then (project) => return @rs.projects.getBySlug(@params.pslug).then (project) =>
@scope.project = project @scope.project = project
@scope.$emit('project:loaded', project) @scope.$emit('project:loaded', project)
@scope.statusList = project.issue_statuses @scope.statusList = project.issue_statuses
@ -106,8 +106,9 @@ class IssueDetailController extends mixOf(taiga.Controller, taiga.PageMixin)
return project return project
loadIssue: -> loadIssue: ->
return @rs.issues.get(@scope.projectId, @scope.issueId).then (issue) => return @rs.issues.getByRef(@scope.projectId, @params.issueref).then (issue) =>
@scope.issue = issue @scope.issue = issue
@scope.issueId = issue.id
@scope.commentModel = issue @scope.commentModel = issue
if @scope.issue.neighbors.previous.ref? if @scope.issue.neighbors.previous.ref?
@ -125,19 +126,12 @@ class IssueDetailController extends mixOf(taiga.Controller, taiga.PageMixin)
@scope.nextUrl = @navUrls.resolve("project-issues-detail", ctx) @scope.nextUrl = @navUrls.resolve("project-issues-detail", ctx)
loadInitialData: -> loadInitialData: ->
params = { promise = @.loadProject()
pslug: @params.pslug return promise.then (project) =>
issueref: @params.issueref @scope.projectId = project.id
} @.fillUsersAndRoles(project.users, project.roles)
@.loadIssue()
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) module.controller("IssueDetailController", IssueDetailController)

View File

@ -91,7 +91,7 @@ class IssuesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi
@rs.issues.storeFilters(@params.pslug, @location.search()) @rs.issues.storeFilters(@params.pslug, @location.search())
loadProject: -> loadProject: ->
return @rs.projects.get(@scope.projectId).then (project) => return @rs.projects.getBySlug(@params.pslug).then (project) =>
@scope.project = project @scope.project = project
@scope.$emit('project:loaded', project) @scope.$emit('project:loaded', project)
@ -268,15 +268,12 @@ class IssuesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi
return data return data
loadInitialData: -> loadInitialData: ->
promise = @repo.resolve({pslug: @params.pslug}).then (data) => promise = @.loadProject()
@scope.projectId = data.project return promise.then (project) =>
@scope.projectId = project.id
@.fillUsersAndRoles(project.users, project.roles)
@.initializeSubscription() @.initializeSubscription()
return data return @q.all([@.loadFilters(), @.loadIssues()])
return promise.then(=> @.loadProject())
.then(=> @.loadUsersAndRoles())
.then(=> @q.all([@.loadFilters(),
@.loadIssues()]))
saveCurrentFiltersTo: (newFilter) -> saveCurrentFiltersTo: (newFilter) ->
deferred = @q.defer() deferred = @q.defer()

View File

@ -148,7 +148,7 @@ class KanbanController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi
]) ])
loadProject: -> loadProject: ->
return @rs.projects.get(@scope.projectId).then (project) => return @rs.projects.getBySlug(@params.pslug).then (project) =>
@scope.project = project @scope.project = project
@scope.points = _.sortBy(project.points, "order") @scope.points = _.sortBy(project.points, "order")
@scope.pointsById = groupBy(project.points, (x) -> x.id) @scope.pointsById = groupBy(project.points, (x) -> x.id)
@ -166,16 +166,13 @@ class KanbanController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi
@.loadUserstories() @.loadUserstories()
loadInitialData: -> loadInitialData: ->
# Resolve project slug promise = @.loadProject()
promise = @repo.resolve({pslug: @params.pslug}).then (data) => return promise.then (project) =>
@scope.projectId = data.project @scope.projectId = project.id
@.fillUsersAndRoles(project.users, project.roles)
@.initializeSubscription() @.initializeSubscription()
return data @.loadKanban().then( => @scope.$broadcast("redraw:wip"))
return promise.then(=> @.loadProject())
.then(=> @.loadUsersAndRoles())
.then(=> @.loadKanban())
.then(=> @scope.$broadcast("redraw:wip"))
## View Mode methods ## View Mode methods

View File

@ -35,6 +35,9 @@ resourceProvider = ($repo, $http, $urls, $storage, $q) ->
params.project = projectId params.project = projectId
return $repo.queryOne("issues", issueId, params) 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) -> service.list = (projectId, filters, options) ->
params = {project: projectId} params = {project: projectId}
params = _.extend({}, params, filters or {}) params = _.extend({}, params, filters or {})

View File

@ -28,6 +28,9 @@ resourceProvider = ($repo, $http, $urls) ->
service.get = (id) -> service.get = (id) ->
return $repo.queryOne("projects", id) return $repo.queryOne("projects", id)
service.getBySlug = (slug) ->
return $repo.queryOneRaw("projects", "by_slug?slug=#{slug}")
service.list = -> service.list = ->
return $repo.queryMany("projects") return $repo.queryMany("projects")

View File

@ -35,6 +35,9 @@ resourceProvider = ($repo, $http, $urls, $storage) ->
params.project = projectId params.project = projectId
return $repo.queryOne("tasks", taskId, params) 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) -> service.list = (projectId, sprintId=null, userStoryId=null) ->
params = {project: projectId} params = {project: projectId}
params.milestone = sprintId if sprintId params.milestone = sprintId if sprintId

View File

@ -32,6 +32,9 @@ resourceProvider = ($repo, $http, $urls, $storage) ->
params.project = projectId params.project = projectId
return $repo.queryOne("userstories", usId, params) return $repo.queryOne("userstories", usId, params)
service.getByRef = (projectId, ref) ->
return $repo.queryOneRaw("userstories", "by_ref?project=#{projectId}&ref=#{ref}")
service.listUnassigned = (projectId, filters) -> service.listUnassigned = (projectId, filters) ->
params = {"project": projectId, "milestone": "null"} params = {"project": projectId, "milestone": "null"}
params = _.extend({}, params, filters or {}) params = _.extend({}, params, filters or {})

View File

@ -28,6 +28,9 @@ resourceProvider = ($repo, $http, $urls) ->
service.get = (wikiId) -> service.get = (wikiId) ->
return $repo.queryOne("wiki", wikiId) return $repo.queryOne("wiki", wikiId)
service.getBySlug = (projectId, slug) ->
return $repo.queryOneRaw("wiki", "by_slug?project=#{projectId}&slug=#{slug}")
service.listLinks = (projectId) -> service.listLinks = (projectId) ->
return $repo.queryMany("wiki-links", {project: projectId}) return $repo.queryMany("wiki-links", {project: projectId})

View File

@ -74,7 +74,7 @@ class SearchController extends mixOf(taiga.Controller, taiga.PageMixin)
return defered.promise return defered.promise
loadProject: -> loadProject: ->
return @rs.projects.get(@scope.projectId).then (project) => return @rs.projects.getBySlug(@params.pslug).then (project) =>
@scope.project = project @scope.project = project
@scope.$emit('project:loaded', project) @scope.$emit('project:loaded', project)
@scope.issueStatusById = groupBy(project.issue_statuses, (x) -> x.id) @scope.issueStatusById = groupBy(project.issue_statuses, (x) -> x.id)
@ -94,12 +94,9 @@ class SearchController extends mixOf(taiga.Controller, taiga.PageMixin)
return promise return promise
loadInitialData: -> loadInitialData: ->
promise = @repo.resolve({pslug: @params.pslug}).then (data) => return @.loadProject().then (project) =>
@scope.projectId = data.project @scope.projectId = project.id
return data @.fillUsersAndRoles(project.users, project.roles)
return promise.then(=> @.loadProject())
.then(=> @.loadUsersAndRoles())
module.controller("SearchController", SearchController) module.controller("SearchController", SearchController)

View File

@ -87,7 +87,7 @@ class TaskDetailController extends mixOf(taiga.Controller, taiga.PageMixin)
@scope.onDeleteGoToUrl = @navUrls.resolve("project-userstories-detail", ctx) @scope.onDeleteGoToUrl = @navUrls.resolve("project-userstories-detail", ctx)
loadProject: -> loadProject: ->
return @rs.projects.get(@scope.projectId).then (project) => return @rs.projects.getBySlug(@params.pslug).then (project) =>
@scope.project = project @scope.project = project
@scope.$emit('project:loaded', project) @scope.$emit('project:loaded', project)
@scope.statusList = project.task_statuses @scope.statusList = project.task_statuses
@ -96,8 +96,9 @@ class TaskDetailController extends mixOf(taiga.Controller, taiga.PageMixin)
return project return project
loadTask: -> loadTask: ->
return @rs.tasks.get(@scope.projectId, @scope.taskId).then (task) => return @rs.tasks.getByRef(@scope.projectId, @params.taskref).then (task) =>
@scope.task = task @scope.task = task
@scope.taskId = task.id
@scope.commentModel = task @scope.commentModel = task
if @scope.task.neighbors.previous.ref? if @scope.task.neighbors.previous.ref?
@ -128,6 +129,7 @@ class TaskDetailController extends mixOf(taiga.Controller, taiga.PageMixin)
return us return us
loadInitialData: -> loadInitialData: ->
###
params = { params = {
pslug: @params.pslug pslug: @params.pslug
taskref: @params.taskref taskref: @params.taskref
@ -142,6 +144,12 @@ class TaskDetailController extends mixOf(taiga.Controller, taiga.PageMixin)
.then(=> @.loadUsersAndRoles()) .then(=> @.loadUsersAndRoles())
.then(=> @.loadTask().then(=> @q.all([@.loadUserStory(), .then(=> @.loadTask().then(=> @q.all([@.loadUserStory(),
@.loadSprint()]))) @.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) module.controller("TaskDetailController", TaskDetailController)

View File

@ -88,7 +88,7 @@ class TeamController extends mixOf(taiga.Controller, taiga.PageMixin)
return data return data
loadProject: -> loadProject: ->
return @rs.projects.get(@scope.projectId).then (project) => return @rs.projects.getBySlug(@params.pslug).then (project) =>
@scope.project = project @scope.project = project
@scope.$emit('project:loaded', project) @scope.$emit('project:loaded', project)
@ -127,14 +127,11 @@ class TeamController extends mixOf(taiga.Controller, taiga.PageMixin)
return stats return stats
loadInitialData: -> loadInitialData: ->
promise = @repo.resolve({pslug: @params.pslug}).then (data) => promise = @.loadProject()
@scope.projectId = data.project return promise.then (project) =>
return data @scope.projectId = project.id
@.fillUsersAndRoles(project.users, project.roles)
return promise.then(=> @.loadProject()) return @.loadMembers().then(=> @.loadMemberStats())
.then(=> @.loadUsersAndRoles())
.then(=> @.loadMembers())
.then(=> @.loadMemberStats())
module.controller("TeamController", TeamController) module.controller("TeamController", TeamController)

View File

@ -93,7 +93,7 @@ class UserStoryDetailController extends mixOf(taiga.Controller, taiga.PageMixin)
@scope.onDeleteGoToUrl = @navUrls.resolve("project-kanban", ctx) @scope.onDeleteGoToUrl = @navUrls.resolve("project-kanban", ctx)
loadProject: -> loadProject: ->
return @rs.projects.get(@scope.projectId).then (project) => return @rs.projects.getBySlug(@params.pslug).then (project) =>
@scope.project = project @scope.project = project
@scope.$emit('project:loaded', project) @scope.$emit('project:loaded', project)
@scope.statusList = project.us_statuses @scope.statusList = project.us_statuses
@ -105,8 +105,9 @@ class UserStoryDetailController extends mixOf(taiga.Controller, taiga.PageMixin)
return project return project
loadUs: -> loadUs: ->
return @rs.userstories.get(@scope.projectId, @scope.usId).then (us) => return @rs.userstories.getByRef(@scope.projectId, @params.usref).then (us) =>
@scope.us = us @scope.us = us
@scope.usId = us.id
@scope.commentModel = us @scope.commentModel = us
if @scope.us.neighbors.previous.ref? if @scope.us.neighbors.previous.ref?
@ -137,20 +138,11 @@ class UserStoryDetailController extends mixOf(taiga.Controller, taiga.PageMixin)
return tasks return tasks
loadInitialData: -> loadInitialData: ->
params = { promise = @.loadProject()
pslug: @params.pslug return promise.then (project) =>
usref: @params.usref @scope.projectId = project.id
} @.fillUsersAndRoles(project.users, project.roles)
@.loadUs().then(=> @q.all([@.loadSprint(), @.loadTasks()]))
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) module.controller("UserStoryDetailController", UserStoryDetailController)

View File

@ -69,17 +69,21 @@ class WikiDetailController extends mixOf(taiga.Controller, taiga.PageMixin)
promise.then null, @.onInitialDataError.bind(@) promise.then null, @.onInitialDataError.bind(@)
loadProject: -> loadProject: ->
return @rs.projects.get(@scope.projectId).then (project) => return @rs.projects.getBySlug(@params.pslug).then (project) =>
@scope.project = project @scope.project = project
@scope.$emit('project:loaded', project) @scope.$emit('project:loaded', project)
@scope.membersById = groupBy(project.memberships, (x) -> x.user) @scope.membersById = groupBy(project.memberships, (x) -> x.user)
return project return project
loadWiki: -> loadWiki: ->
if @scope.wikiId promise = @rs.wiki.getBySlug(@scope.projectId, @params.slug)
return @rs.wiki.get(@scope.wikiId).then (wiki) => promise.then (wiki) =>
@scope.wiki = wiki @scope.wiki = wiki
return wiki @scope.wikiId = wiki.id
return @scope.wiki
promise.then null, (xhr) =>
@scope.wikiId = null
if @scope.project.my_permissions.indexOf("add_wiki_page") == -1 if @scope.project.my_permissions.indexOf("add_wiki_page") == -1
return null return null
@ -97,33 +101,11 @@ class WikiDetailController extends mixOf(taiga.Controller, taiga.PageMixin)
@scope.wikiLinks = wikiLinks @scope.wikiLinks = wikiLinks
loadInitialData: -> loadInitialData: ->
params = { promise = @.loadProject()
pslug: @params.pslug return promise.then (project) =>
wikipage: @params.slug @scope.projectId = project.id
} @.fillUsersAndRoles(project.users, project.roles)
@q.all([@.loadWikiLinks(), @.loadWiki()])
# 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: -> delete: ->
# TODO: i18n # TODO: i18n