@@ -70,11 +70,16 @@ func PinIssue(ctx context.Context, issue *Issue, user *user_model.User) error {
7070 return ErrIssueMaxPinReached
7171 }
7272
73+ pinnedIssuesMaxPinOrder , err := getPinnedIssuesMaxPinOrder (ctx , issue .RepoID , issue .IsPull )
74+ if err != nil {
75+ return err
76+ }
77+
7378 if _ , err = db .GetEngine (ctx ).Insert (& IssuePin {
7479 RepoID : issue .RepoID ,
7580 IssueID : issue .ID ,
7681 IsPull : issue .IsPull ,
77- PinOrder : pinnedIssuesNum + 1 ,
82+ PinOrder : pinnedIssuesMaxPinOrder + 1 ,
7883 }); err != nil {
7984 return err
8085 }
@@ -119,6 +124,12 @@ func getPinnedIssuesNum(ctx context.Context, repoID int64, isPull bool) (int, er
119124 return pinnedIssuesNum , err
120125}
121126
127+ func getPinnedIssuesMaxPinOrder (ctx context.Context , repoID int64 , isPull bool ) (int , error ) {
128+ var maxPinnedIssuesMaxPinOrder int
129+ _ , err := db .GetEngine (ctx ).SQL ("SELECT max(pin_order) FROM issue_pin WHERE repo_id = ? AND is_pull = ?" , repoID , isPull ).Get (& maxPinnedIssuesMaxPinOrder )
130+ return maxPinnedIssuesMaxPinOrder , err
131+ }
132+
122133// MovePin moves a Pinned Issue to a new Position
123134func MovePin (ctx context.Context , issue * Issue , newPosition int ) error {
124135 if newPosition < 1 {
@@ -134,9 +145,9 @@ func MovePin(ctx context.Context, issue *Issue, newPosition int) error {
134145 }
135146
136147 return db .WithTx (ctx , func (ctx context.Context ) error {
137- if issuePin .PinOrder > newPosition {
148+ if issuePin .PinOrder > newPosition { // move the issue to a lower position
138149 _ , err = db .GetEngine (ctx ).Exec ("UPDATE issue_pin SET pin_order = pin_order + 1 WHERE repo_id = ? AND is_pull = ? AND pin_order >= ? AND pin_order < ?" , issue .RepoID , issue .IsPull , newPosition , issuePin .PinOrder )
139- } else {
150+ } else { // move the issue to a higher position
140151 // Lower the Position of all Pinned Issue that came after the current Position
141152 _ , err = db .GetEngine (ctx ).Exec ("UPDATE issue_pin SET pin_order = pin_order - 1 WHERE repo_id = ? AND is_pull = ? AND pin_order > ? AND pin_order <= ?" , issue .RepoID , issue .IsPull , issuePin .PinOrder , newPosition )
142153 }
0 commit comments