From a6811b0493a495f3eff381bdc763a40fe5d93de0 Mon Sep 17 00:00:00 2001 From: wxiaoguang Date: Mon, 30 Mar 2026 15:35:49 +0800 Subject: [PATCH] fix get default column --- models/project/column.go | 42 ++++++++++++++++------------- routers/web/repo/issue_page_meta.go | 8 ------ services/projects/issue.go | 5 ++-- 3 files changed, 26 insertions(+), 29 deletions(-) diff --git a/models/project/column.go b/models/project/column.go index 79f6dfe911..659f1868a8 100644 --- a/models/project/column.go +++ b/models/project/column.go @@ -257,9 +257,11 @@ func (p *Project) GetColumns(ctx context.Context) (ColumnList, error) { return columns, nil } -// getDefaultColumn return default column and ensure only one exists -func (p *Project) getDefaultColumn(ctx context.Context) (*Column, error) { +// GetDefaultColumnWithFallback return default column if one exists, otherwise return the first column by sorting and set it as default column +func (p *Project) GetDefaultColumnWithFallback(ctx context.Context) (*Column, error) { var column Column + + // try to find a column "default=true" has, err := db.GetEngine(ctx). Where("project_id=? AND `default` = ?", p.ID, true). Desc("id").Get(&column) @@ -270,23 +272,9 @@ func (p *Project) getDefaultColumn(ctx context.Context) (*Column, error) { if has { return &column, nil } - return nil, ErrProjectColumnNotExist{ColumnID: 0} -} -// MustDefaultColumn returns the default column for a project. -// If one exists, it is returned -// If none exists, the first column will be elevated to the default column of this project -func (p *Project) MustDefaultColumn(ctx context.Context) (*Column, error) { - c, err := p.getDefaultColumn(ctx) - if err != nil && !IsErrProjectColumnNotExist(err) { - return nil, err - } - if c != nil { - return c, nil - } - - var column Column - has, err := db.GetEngine(ctx).Where("project_id=?", p.ID).OrderBy("sorting, id").Get(&column) + // try to first the first column by sorting + has, err = db.GetEngine(ctx).Where("project_id=?", p.ID).OrderBy("sorting, id").Get(&column) if err != nil { return nil, err } @@ -298,8 +286,24 @@ func (p *Project) MustDefaultColumn(ctx context.Context) (*Column, error) { return &column, nil } + return nil, ErrProjectColumnNotExist{ColumnID: 0} +} + +// MustDefaultColumn returns the default column for a project. +// If one exists, it is returned +// If none exists, the first column will be elevated to the default column of this project +// If there is no column, it creates a default column and returns it +func (p *Project) MustDefaultColumn(ctx context.Context) (*Column, error) { + c, err := p.GetDefaultColumnWithFallback(ctx) + if err != nil && !IsErrProjectColumnNotExist(err) { + return nil, err + } + if c != nil { + return c, nil + } + // create a default column if none is found - column = Column{ + column := Column{ ProjectID: p.ID, Default: true, Title: "Uncategorized", diff --git a/routers/web/repo/issue_page_meta.go b/routers/web/repo/issue_page_meta.go index f2dfb9cbfe..680ead973a 100644 --- a/routers/web/repo/issue_page_meta.go +++ b/routers/web/repo/issue_page_meta.go @@ -183,14 +183,6 @@ func (d *IssuePageMetaData) retrieveProjectData(ctx *context.Context) { ctx.ServerError("ProjectColumnID", err) return } - if columnID == 0 { - defaultColumn, err := d.Issue.Project.MustDefaultColumn(ctx) - if err != nil { - ctx.ServerError("MustDefaultColumn", err) - return - } - columnID = defaultColumn.ID - } for _, col := range columns { if col.ID == columnID { d.ProjectsData.SelectedProjectColumn = col diff --git a/services/projects/issue.go b/services/projects/issue.go index 590fe960d5..f25323281a 100644 --- a/services/projects/issue.go +++ b/services/projects/issue.go @@ -12,6 +12,7 @@ import ( project_model "code.gitea.io/gitea/models/project" user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/optional" + "code.gitea.io/gitea/modules/util" ) // MoveIssuesOnProjectColumn moves or keeps issues in a column and sorts them inside that column @@ -100,9 +101,9 @@ func LoadIssuesFromProject(ctx context.Context, project *project_model.Project, return nil, err } - defaultColumn, err := project.MustDefaultColumn(ctx) + defaultColumn, err := project.GetDefaultColumnWithFallback(ctx) if err != nil { - return nil, err + return nil, util.Iif(errors.Is(err, util.ErrNotExist), nil, err) } issueColumnMap, err := issues_model.LoadProjectIssueColumnMap(ctx, project.ID, defaultColumn.ID)