Skip to content

rename board => column in projects #20985

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Closed
4 changes: 2 additions & 2 deletions models/activities/statistic.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ type Statistic struct {
Mirror, Release, AuthSource, Webhook,
Milestone, Label, HookTask,
Team, UpdateTask, Project,
ProjectBoard, Attachment int64
ProjectColumn, Attachment int64
IssueByLabel []IssueByLabelCount
IssueByRepository []IssueByRepositoryCount
}
Expand Down Expand Up @@ -110,6 +110,6 @@ func GetStatistic() (stats Statistic) {
stats.Counter.Team, _ = e.Count(new(organization.Team))
stats.Counter.Attachment, _ = e.Count(new(repo_model.Attachment))
stats.Counter.Project, _ = e.Count(new(project_model.Project))
stats.Counter.ProjectBoard, _ = e.Count(new(project_model.Board))
stats.Counter.ProjectColumn, _ = e.Count(new(project_model.Column))
return stats
}
File renamed without changes.
8 changes: 4 additions & 4 deletions models/fixtures/project_issue.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,22 @@
id: 1
issue_id: 1
project_id: 1
project_board_id: 1
project_column_id: 1

-
id: 2
issue_id: 2
project_id: 1
project_board_id: 0 # no board assigned
project_column_id: 0 # no board assigned

-
id: 3
issue_id: 3
project_id: 1
project_board_id: 2
project_column_id: 2

-
id: 4
issue_id: 5
project_id: 1
project_board_id: 3
project_column_id: 3
10 changes: 5 additions & 5 deletions models/issues/issue.go
Original file line number Diff line number Diff line change
Expand Up @@ -1189,7 +1189,7 @@ type IssuesOptions struct { //nolint
SubscriberID int64
MilestoneIDs []int64
ProjectID int64
ProjectBoardID int64
ProjectColumnID int64
IsClosed util.OptionalBool
IsPull util.OptionalBool
LabelIDs []int64
Expand Down Expand Up @@ -1320,11 +1320,11 @@ func (opts *IssuesOptions) setupSessionNoLimit(sess *xorm.Session) {
And("project_issue.project_id=?", opts.ProjectID)
}

if opts.ProjectBoardID != 0 {
if opts.ProjectBoardID > 0 {
sess.In("issue.id", builder.Select("issue_id").From("project_issue").Where(builder.Eq{"project_board_id": opts.ProjectBoardID}))
if opts.ProjectColumnID != 0 {
if opts.ProjectColumnID > 0 {
sess.In("issue.id", builder.Select("issue_id").From("project_issue").Where(builder.Eq{"project_column_id": opts.ProjectColumnID}))
} else {
sess.In("issue.id", builder.Select("issue_id").From("project_issue").Where(builder.Eq{"project_board_id": 0}))
sess.In("issue.id", builder.Select("issue_id").From("project_issue").Where(builder.Eq{"project_column_id": 0}))
}
}

Expand Down
40 changes: 20 additions & 20 deletions models/issues/issue_project.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,29 +46,29 @@ func (issue *Issue) projectID(ctx context.Context) int64 {
return ip.ProjectID
}

// ProjectBoardID return project board id if issue was assigned to one
func (issue *Issue) ProjectBoardID() int64 {
return issue.projectBoardID(db.DefaultContext)
// ProjectColumnID returns project column id if issue was assigned to one
func (issue *Issue) ProjectColumnID() int64 {
return issue.projectColumnID(db.DefaultContext)
}

func (issue *Issue) projectBoardID(ctx context.Context) int64 {
func (issue *Issue) projectColumnID(ctx context.Context) int64 {
var ip project_model.ProjectIssue
has, err := db.GetEngine(ctx).Where("issue_id=?", issue.ID).Get(&ip)
if err != nil || !has {
return 0
}
return ip.ProjectBoardID
return ip.ProjectColumnID
}

// LoadIssuesFromBoard load issues assigned to this board
func LoadIssuesFromBoard(b *project_model.Board) (IssueList, error) {
// LoadIssuesFromColumn loads issues assigned to this column
func LoadIssuesFromColumn(b *project_model.Column) (IssueList, error) {
issueList := make([]*Issue, 0, 10)

if b.ID != 0 {
issues, err := Issues(&IssuesOptions{
ProjectBoardID: b.ID,
ProjectID: b.ProjectID,
SortType: "project-column-sorting",
ProjectColumnID: b.ID,
ProjectID: b.ProjectID,
SortType: "project-column-sorting",
})
if err != nil {
return nil, err
Expand All @@ -78,9 +78,9 @@ func LoadIssuesFromBoard(b *project_model.Board) (IssueList, error) {

if b.Default {
issues, err := Issues(&IssuesOptions{
ProjectBoardID: -1, // Issues without ProjectBoardID
ProjectID: b.ProjectID,
SortType: "project-column-sorting",
ProjectColumnID: -1, // Issues without ProjectColumnID
ProjectID: b.ProjectID,
SortType: "project-column-sorting",
})
if err != nil {
return nil, err
Expand All @@ -95,11 +95,11 @@ func LoadIssuesFromBoard(b *project_model.Board) (IssueList, error) {
return issueList, nil
}

// LoadIssuesFromBoardList load issues assigned to the boards
func LoadIssuesFromBoardList(bs project_model.BoardList) (map[int64]IssueList, error) {
// LoadIssuesFromColumnList load issues assigned to the columns
func LoadIssuesFromColumnList(bs project_model.Columns) (map[int64]IssueList, error) {
issuesMap := make(map[int64]IssueList, len(bs))
for i := range bs {
il, err := LoadIssuesFromBoard(bs[i])
il, err := LoadIssuesFromColumn(bs[i])
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -164,8 +164,8 @@ func addUpdateIssueProject(ctx context.Context, issue *Issue, doer *user_model.U
})
}

// MoveIssueAcrossProjectBoards move a card from one board to another
func MoveIssueAcrossProjectBoards(issue *Issue, board *project_model.Board) error {
// MoveIssueAcrossProjectColumn move a card from one column to another
func MoveIssueAcrossProjectColumns(issue *Issue, column *project_model.Column) error {
ctx, committer, err := db.TxContext()
if err != nil {
return err
Expand All @@ -183,8 +183,8 @@ func MoveIssueAcrossProjectBoards(issue *Issue, board *project_model.Board) erro
return fmt.Errorf("issue has to be added to a project first")
}

pis.ProjectBoardID = board.ID
if _, err := sess.ID(pis.ID).Cols("project_board_id").Update(&pis); err != nil {
pis.ProjectColumnID = column.ID
if _, err := sess.ID(pis.ID).Cols("project_column_id").Update(&pis); err != nil {
return err
}

Expand Down
38 changes: 38 additions & 0 deletions models/migrations/migrations.go
Original file line number Diff line number Diff line change
Expand Up @@ -413,6 +413,8 @@ var migrations = []Migration{
NewMigration("Add badges to users", createUserBadgesTable),
// v225 -> v226
NewMigration("Alter gpg_key/public_key content TEXT fields to MEDIUMTEXT", alterPublicGPGKeyContentFieldsToMediumText),
// v226 -> 227
NewMigration("Rename project boards to columns", renameProjectBoardsToColumns),
}

// GetCurrentDBVersion returns the current db version
Expand Down Expand Up @@ -1014,3 +1016,39 @@ func modifyColumn(x *xorm.Engine, tableName string, col *schemas.Column) error {
}
return nil
}

func renameTable(sess *xorm.Session, old, new string) error {
dialect := sess.Engine().Dialect().URI().DBType

switch dialect {
case schemas.MYSQL:
_, err := sess.Exec(fmt.Sprintf("RENAME TABLE `%s` TO `%s`;", old, new))
return err
case schemas.POSTGRES, schemas.SQLITE:
_, err := sess.Exec(fmt.Sprintf("ALTER TABLE `%s` RENAME TO `%s`;", old, new))
return err
case schemas.MSSQL:
_, err := sess.Exec(fmt.Sprintf("sp_rename `%s`,`%s`", old, new))
return err
default:
return fmt.Errorf("dialect '%s' not supported", dialect)
}
}

func renameColumn(sess *xorm.Session, table, old, new string) error {
dialect := sess.Engine().Dialect().URI().DBType

switch dialect {
case schemas.MYSQL:
_, err := sess.Exec("ALTER TABLE `task` CHANGE errors message text")
return err
case schemas.POSTGRES, schemas.SQLITE:
_, err := sess.Exec("ALTER TABLE `task` RENAME COLUMN errors TO message")
return err
case schemas.MSSQL:
_, err := sess.Exec("sp_rename 'task.errors', 'message', 'COLUMN'")
return err
default:
return fmt.Errorf("dialect '%s' not supported", dialect)
}
}
27 changes: 27 additions & 0 deletions models/migrations/v226.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// Copyright 2022 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.

package migrations

import (
"xorm.io/xorm"
)

func renameProjectBoardsToColumns(x *xorm.Engine) error {
sess := x.NewSession()
defer sess.Close()
if err := sess.Begin(); err != nil {
return err
}

if err := renameTable(sess, "project_board", "project_column"); err != nil {
return err
}

if err := renameColumn(sess, "project_issue", "project_board_id", "project_column_id"); err != nil {
return err
}

return sess.Commit()
}
Loading