|
|
@@ -1,9 +1,10 @@
|
|
|
package project
|
|
|
|
|
|
import (
|
|
|
- "github.com/porter-dev/porter/api/server/shared/apierrors"
|
|
|
"net/http"
|
|
|
|
|
|
+ "github.com/porter-dev/porter/api/server/shared/apierrors"
|
|
|
+
|
|
|
"github.com/porter-dev/porter/api/server/handlers"
|
|
|
"github.com/porter-dev/porter/api/server/shared"
|
|
|
"github.com/porter-dev/porter/api/server/shared/config"
|
|
|
@@ -27,39 +28,59 @@ func NewCollaboratorsListHandler(
|
|
|
func (p *CollaboratorsListHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|
|
proj, _ := r.Context().Value(types.ProjectScope).(*models.Project)
|
|
|
|
|
|
- roles, err := p.Repo().Project().ListProjectRoles(proj.ID)
|
|
|
+ var res types.ListCollaboratorsResponse
|
|
|
+
|
|
|
+ roles, err := p.Repo().ProjectRole().ListProjectRoles(proj.ID)
|
|
|
|
|
|
if err != nil {
|
|
|
p.HandleAPIError(w, r, apierrors.NewErrInternal(err))
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- roleMap := make(map[uint]*models.Role)
|
|
|
- idArr := make([]uint, 0)
|
|
|
+ if len(roles) > 0 {
|
|
|
+ for _, role := range roles {
|
|
|
+ for _, user := range role.Users {
|
|
|
+ res = append(res, &types.Collaborator{
|
|
|
+ ProjectRoleUID: role.UniqueID,
|
|
|
+ UserID: user.ID,
|
|
|
+ ProjectID: proj.ID,
|
|
|
+ Email: user.Email,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else { // legacy operation
|
|
|
+ legacyRoles, err := p.Repo().Project().ListProjectRoles(proj.ID)
|
|
|
|
|
|
- for _, role := range roles {
|
|
|
- roleCp := role
|
|
|
- roleMap[role.UserID] = &roleCp
|
|
|
- idArr = append(idArr, role.UserID)
|
|
|
- }
|
|
|
+ if err != nil {
|
|
|
+ p.HandleAPIError(w, r, apierrors.NewErrInternal(err))
|
|
|
+ return
|
|
|
+ }
|
|
|
|
|
|
- users, err := p.Repo().User().ListUsersByIDs(idArr)
|
|
|
+ roleMap := make(map[uint]*models.Role)
|
|
|
+ idArr := make([]uint, 0)
|
|
|
|
|
|
- if err != nil {
|
|
|
- p.HandleAPIError(w, r, apierrors.NewErrInternal(err))
|
|
|
- return
|
|
|
- }
|
|
|
+ for _, role := range legacyRoles {
|
|
|
+ roleCp := role
|
|
|
+ roleMap[role.UserID] = &roleCp
|
|
|
+ idArr = append(idArr, role.UserID)
|
|
|
+ }
|
|
|
+
|
|
|
+ users, err := p.Repo().User().ListUsersByIDs(idArr)
|
|
|
|
|
|
- var res types.ListCollaboratorsResponse = make([]*types.Collaborator, 0)
|
|
|
+ if err != nil {
|
|
|
+ p.HandleAPIError(w, r, apierrors.NewErrInternal(err))
|
|
|
+ return
|
|
|
+ }
|
|
|
|
|
|
- for _, user := range users {
|
|
|
- res = append(res, &types.Collaborator{
|
|
|
- ID: roleMap[user.ID].ID,
|
|
|
- Kind: string(roleMap[user.ID].Kind),
|
|
|
- UserID: roleMap[user.ID].UserID,
|
|
|
- Email: user.Email,
|
|
|
- ProjectID: roleMap[user.ID].ProjectID,
|
|
|
- })
|
|
|
+ for _, user := range users {
|
|
|
+ res = append(res, &types.Collaborator{
|
|
|
+ ID: roleMap[user.ID].ID,
|
|
|
+ Kind: string(roleMap[user.ID].Kind),
|
|
|
+ UserID: roleMap[user.ID].UserID,
|
|
|
+ Email: user.Email,
|
|
|
+ ProjectID: roleMap[user.ID].ProjectID,
|
|
|
+ })
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
p.WriteResult(w, r, res)
|