2019-11-02 06:33:20 +03:00
// Copyright 2019 The Gitea Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2019-11-02 06:33:20 +03:00
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"
2023-09-05 21:37:47 +03:00
notify_service "code.gitea.io/gitea/services/notify"
2019-11-02 06:33:20 +03:00
)
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 {
2022-10-24 22:29:17 +03:00
return fmt . Errorf ( "HasMilestoneByRepoID: %w" , err )
2022-06-30 18:55:08 +03:00
}
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-12-10 05:46:31 +03:00
if _ , err := issues_model . CreateComment ( 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.
2023-10-11 07:24:07 +03:00
func ChangeMilestoneAssign ( ctx context . Context , issue * issues_model . Issue , doer * user_model . User , oldMilestoneID int64 ) ( err error ) {
dbCtx , committer , err := db . TxContext ( ctx )
2022-04-08 12:11:15 +03:00
if err != nil {
return err
}
defer committer . Close ( )
2023-10-11 07:24:07 +03:00
if err = changeMilestoneAssign ( dbCtx , doer , issue , oldMilestoneID ) ; err != nil {
2022-04-08 12:11:15 +03:00
return err
}
if err = committer . Commit ( ) ; err != nil {
2022-10-24 22:29:17 +03:00
return fmt . Errorf ( "Commit: %w" , err )
2019-11-02 06:33:20 +03:00
}
2023-10-11 07:24:07 +03:00
notify_service . IssueChangeMilestone ( ctx , doer , issue , oldMilestoneID )
2019-11-02 06:33:20 +03:00
return nil
}