浏览代码

Returned ordered project roles

Mauricio Araujo 2 年之前
父节点
当前提交
586498621b

+ 1 - 1
api/server/handlers/billing/list.go

@@ -67,7 +67,7 @@ func (c *CheckPaymentEnabledHandler) ServeHTTP(w http.ResponseWriter, r *http.Re
 	proj, _ := ctx.Value(types.ProjectScope).(*models.Project)
 
 	// Get project roles
-	roles, err := c.Repo().Project().ListProjectRoles(proj.ID)
+	roles, err := c.Repo().Project().ListProjectRolesOrdered(proj.ID)
 	if err != nil {
 		err = telemetry.Error(ctx, span, err, "error listing project roles")
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 12 - 1
internal/repository/gorm/project.go

@@ -104,7 +104,18 @@ func (repo *ProjectRepository) ListProjectsByUserID(userID uint) ([]*models.Proj
 	return projects, nil
 }
 
-// ReadProject gets a projects specified by a unique id
+// ListProjectRolesOrdered returns a list of roles for a project ordered by creation date
+func (repo *ProjectRepository) ListProjectRolesOrdered(projID uint) ([]models.Role, error) {
+	project := &models.Project{}
+
+	if err := repo.db.Preload("Roles").Where("id = ?", projID).Order("created_at").First(&project).Error; err != nil {
+		return nil, err
+	}
+
+	return project.Roles, nil
+}
+
+// ListProjectRoles returns a list of roles for the project
 func (repo *ProjectRepository) ListProjectRoles(projID uint) ([]models.Role, error) {
 	project := &models.Project{}
 

+ 1 - 0
internal/repository/project.go

@@ -16,6 +16,7 @@ type ProjectRepository interface {
 	ReadProject(id uint) (*models.Project, error)
 	ReadProjectRole(projID, userID uint) (*models.Role, error)
 	ListProjectRoles(projID uint) ([]models.Role, error)
+	ListProjectRolesOrdered(projID uint) ([]models.Role, error)
 	ListProjectsByUserID(userID uint) ([]*models.Project, error)
 	DeleteProject(project *models.Project) (*models.Project, error)
 	DeleteProjectRole(projID, userID uint) (*models.Role, error)

+ 16 - 0
internal/repository/test/project.go

@@ -171,6 +171,22 @@ func (repo *ProjectRepository) ListProjectRoles(projID uint) ([]models.Role, err
 	return repo.projects[index].Roles, nil
 }
 
+// ListProjectRoles returns a list of roles for the project
+func (repo *ProjectRepository) ListProjectRolesOrdered(projID uint) ([]models.Role, error) {
+	if !repo.canQuery {
+		return nil, errors.New("Cannot read from database")
+	}
+
+	if int(projID-1) >= len(repo.projects) || repo.projects[projID-1] == nil {
+		return nil, gorm.ErrRecordNotFound
+	}
+
+	index := int(projID - 1)
+	repo.projects[index] = nil
+
+	return repo.projects[index].Roles, nil
+}
+
 // DeleteProject removes a project
 func (repo *ProjectRepository) DeleteProject(project *models.Project) (*models.Project, error) {
 	if !repo.canQuery {