2019-11-02 06:33:20 +03:00
// Copyright 2019 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 issue
import (
2022-04-08 12:11:15 +03:00
"context"
"fmt"
"code.gitea.io/gitea/models/db"
issues_model "code.gitea.io/gitea/models/issues"
2021-11-24 12:49:20 +03:00
user_model "code.gitea.io/gitea/models/user"
2019-11-02 06:33:20 +03:00
"code.gitea.io/gitea/modules/notification"
)
2022-06-13 12:37:59 +03:00
func changeMilestoneAssign ( ctx context . Context , doer * user_model . User , issue * issues_model . Issue , oldMilestoneID int64 ) error {
2022-06-30 18:55:08 +03:00
// Only check if milestone exists if we don't remove it.
if issue . MilestoneID > 0 {
has , err := issues_model . HasMilestoneByRepoID ( ctx , issue . RepoID , issue . MilestoneID )
if err != nil {
return fmt . Errorf ( "HasMilestoneByRepoID: %v" , err )
}
if ! has {
return fmt . Errorf ( "HasMilestoneByRepoID: issue doesn't exist" )
}
}
2022-06-13 12:37:59 +03:00
if err := issues_model . UpdateIssueCols ( ctx , issue , "milestone_id" ) ; err != nil {
2022-04-08 12:11:15 +03:00
return err
}
if oldMilestoneID > 0 {
if err := issues_model . UpdateMilestoneCounters ( ctx , oldMilestoneID ) ; err != nil {
return err
}
}
if issue . MilestoneID > 0 {
if err := issues_model . UpdateMilestoneCounters ( ctx , issue . MilestoneID ) ; err != nil {
return err
}
}
if oldMilestoneID > 0 || issue . MilestoneID > 0 {
if err := issue . LoadRepo ( ctx ) ; err != nil {
return err
}
2022-06-13 12:37:59 +03:00
opts := & issues_model . CreateCommentOptions {
Type : issues_model . CommentTypeMilestone ,
2022-04-08 12:11:15 +03:00
Doer : doer ,
Repo : issue . Repo ,
Issue : issue ,
OldMilestoneID : oldMilestoneID ,
MilestoneID : issue . MilestoneID ,
}
2022-06-13 12:37:59 +03:00
if _ , err := issues_model . CreateCommentCtx ( ctx , opts ) ; err != nil {
2022-04-08 12:11:15 +03:00
return err
}
}
return nil
}
2019-11-02 06:33:20 +03:00
// ChangeMilestoneAssign changes assignment of milestone for issue.
2022-06-13 12:37:59 +03:00
func ChangeMilestoneAssign ( issue * issues_model . Issue , doer * user_model . User , oldMilestoneID int64 ) ( err error ) {
2022-04-08 12:11:15 +03:00
ctx , committer , err := db . TxContext ( )
if err != nil {
return err
}
defer committer . Close ( )
if err = changeMilestoneAssign ( ctx , doer , issue , oldMilestoneID ) ; err != nil {
return err
}
if err = committer . Commit ( ) ; err != nil {
return fmt . Errorf ( "Commit: %v" , err )
2019-11-02 06:33:20 +03:00
}
notification . NotifyIssueChangeMilestone ( doer , issue , oldMilestoneID )
return nil
}