Compare commits

...

2 Commits

2 changed files with 56 additions and 47 deletions

View File

@ -157,11 +157,6 @@ func NewColumn(ctx context.Context, column *Column) error {
// DeleteColumnByID removes all issues references to the project column. // DeleteColumnByID removes all issues references to the project column.
func DeleteColumnByID(ctx context.Context, columnID int64) error { func DeleteColumnByID(ctx context.Context, columnID int64) error {
return db.WithTx(ctx, func(ctx context.Context) error { return db.WithTx(ctx, func(ctx context.Context) error {
return deleteColumnByID(ctx, columnID)
})
}
func deleteColumnByID(ctx context.Context, columnID int64) error {
column, err := GetColumn(ctx, columnID) column, err := GetColumn(ctx, columnID)
if err != nil { if err != nil {
if IsErrProjectColumnNotExist(err) { if IsErrProjectColumnNotExist(err) {
@ -175,24 +170,39 @@ func deleteColumnByID(ctx context.Context, columnID int64) error {
return errors.New("deleteColumnByID: cannot delete default column") return errors.New("deleteColumnByID: cannot delete default column")
} }
// move all issues to the default column var numColumns int64
if _, err := db.GetEngine(ctx).Table("project_board").
Where("project_id=?", column.ProjectID).Count(&numColumns); err != nil {
return err
}
// last column with issues cannot be deleted
if column.NumIssues > 0 && numColumns <= 1 {
return errors.New("deleteColumnByID: cannot delete last column with issues")
}
if column.NumIssues > 0 {
project, err := GetProjectByID(ctx, column.ProjectID) project, err := GetProjectByID(ctx, column.ProjectID)
if err != nil { if err != nil {
return err return err
} }
defaultColumn, err := project.MustDefaultColumn(ctx)
defaultColumn, err := project.getDefaultColumn(ctx)
if err != nil { if err != nil {
return err return err
} }
// move all issues to the default column
if err = column.moveIssuesToAnotherColumn(ctx, defaultColumn); err != nil { if err = column.moveIssuesToAnotherColumn(ctx, defaultColumn); err != nil {
return err return err
} }
}
if _, err := db.GetEngine(ctx).ID(column.ID).NoAutoCondition().Delete(column); err != nil { if _, err := db.GetEngine(ctx).ID(column.ID).NoAutoCondition().Delete(column); err != nil {
return err return err
} }
return nil return nil
})
} }
func deleteColumnByProjectID(ctx context.Context, projectID int64) error { func deleteColumnByProjectID(ctx context.Context, projectID int64) error {
@ -261,6 +271,20 @@ func (p *Project) getDefaultColumn(ctx context.Context) (*Column, error) {
return nil, ErrProjectColumnNotExist{ColumnID: 0} return nil, ErrProjectColumnNotExist{ColumnID: 0}
} }
func (p *Project) createDefaultColumn(ctx context.Context) (*Column, error) {
// create a default column if none is found
column := Column{
ProjectID: p.ID,
Default: true,
Title: "Uncategorized",
CreatorID: p.CreatorID,
}
if _, err := db.GetEngine(ctx).Insert(&column); err != nil {
return nil, err
}
return &column, nil
}
// MustDefaultColumn returns the default column for a project. // MustDefaultColumn returns the default column for a project.
// If one exists, it is returned // If one exists, it is returned
// If none exists, the first column will be elevated to the default column of this project // If none exists, the first column will be elevated to the default column of this project
@ -286,17 +310,7 @@ func (p *Project) MustDefaultColumn(ctx context.Context) (*Column, error) {
return &column, nil return &column, nil
} }
// create a default column if none is found return p.createDefaultColumn(ctx)
column = Column{
ProjectID: p.ID,
Default: true,
Title: "Uncategorized",
CreatorID: p.CreatorID,
}
if _, err := db.GetEngine(ctx).Insert(&column); err != nil {
return nil, err
}
return &column, nil
} }
// SetDefaultColumn represents a column for issues not assigned to one // SetDefaultColumn represents a column for issues not assigned to one

View File

@ -100,12 +100,7 @@ func LoadIssuesFromProject(ctx context.Context, project *project_model.Project,
return nil, err return nil, err
} }
defaultColumn, err := project.MustDefaultColumn(ctx) issueColumnMap, err := issues_model.LoadProjectIssueColumnMap(ctx, project.ID, 0)
if err != nil {
return nil, err
}
issueColumnMap, err := issues_model.LoadProjectIssueColumnMap(ctx, project.ID, defaultColumn.ID)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -113,7 +108,7 @@ func LoadIssuesFromProject(ctx context.Context, project *project_model.Project,
results := make(map[int64]issues_model.IssueList) results := make(map[int64]issues_model.IssueList)
for _, issue := range issueList { for _, issue := range issueList {
projectColumnID, ok := issueColumnMap[issue.ID] projectColumnID, ok := issueColumnMap[issue.ID]
if !ok { if !ok || projectColumnID == 0 {
continue continue
} }
if _, ok := results[projectColumnID]; !ok { if _, ok := results[projectColumnID]; !ok {