3fd0aa751d
Wrap the model-layer column/project/issue mutation funcs in service-layer helpers (CreateColumn, EditColumn, DeleteColumn, ReorderColumns, DeleteProject, AssignOrRemoveProjects) that publish the matching SSE event after the underlying call succeeds. Routers (web + REST) are migrated to call these service helpers so the publish side-effects fire uniformly across repo, user, and org scopes. DeleteColumn snapshots the column's issues before deletion and emits one CardMoved per affected issue (alongside the ColumnDeleted event) so the receiving tab can patch the DOM without a full reload. Move-issue publishing fires after the txn commits so we never emit events for moves that get rolled back.
50 lines
1.3 KiB
Go
50 lines
1.3 KiB
Go
// Copyright 2024 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package project
|
|
|
|
import (
|
|
project_model "code.gitea.io/gitea/models/project"
|
|
"code.gitea.io/gitea/modules/json"
|
|
"code.gitea.io/gitea/services/context"
|
|
project_service "code.gitea.io/gitea/services/projects"
|
|
)
|
|
|
|
// MoveColumns moves or keeps columns in a project and sorts them inside that project
|
|
func MoveColumns(ctx *context.Context) {
|
|
project, err := project_model.GetProjectByID(ctx, ctx.PathParamInt64("id"))
|
|
if err != nil {
|
|
ctx.NotFoundOrServerError("GetProjectByID", project_model.IsErrProjectNotExist, err)
|
|
return
|
|
}
|
|
if !project.CanBeAccessedByOwnerRepo(ctx.ContextUser.ID, ctx.Repo.Repository) {
|
|
ctx.NotFound(nil)
|
|
return
|
|
}
|
|
|
|
type movedColumnsForm struct {
|
|
Columns []struct {
|
|
ColumnID int64 `json:"columnID"`
|
|
Sorting int64 `json:"sorting"`
|
|
} `json:"columns"`
|
|
}
|
|
|
|
form := &movedColumnsForm{}
|
|
if err = json.NewDecoder(ctx.Req.Body).Decode(&form); err != nil {
|
|
ctx.ServerError("DecodeMovedColumnsForm", err)
|
|
return
|
|
}
|
|
|
|
sortedColumnIDs := make(map[int64]int64)
|
|
for _, column := range form.Columns {
|
|
sortedColumnIDs[column.Sorting] = column.ColumnID
|
|
}
|
|
|
|
if err = project_service.ReorderColumns(ctx, project, sortedColumnIDs); err != nil {
|
|
ctx.ServerError("MoveColumnsOnProject", err)
|
|
return
|
|
}
|
|
|
|
ctx.JSONOK()
|
|
}
|