@@ -105,13 +105,23 @@ func RemoveUserBadge(ctx context.Context, u *User, badge *Badge) error {
105
105
// RemoveUserBadges removes badges from a user.
106
106
func RemoveUserBadges (ctx context.Context , u * User , badges []* Badge ) error {
107
107
return db .WithTx (ctx , func (ctx context.Context ) error {
108
+ badgeSlugs := make ([]string , 0 , len (badges ))
108
109
for _ , badge := range badges {
109
- if _ , err := db .GetEngine (ctx ).
110
- Join ("INNER" , "badge" , "badge.id = `user_badge`.badge_id" ).
111
- Where ("`user_badge`.user_id=? AND `badge`.slug=?" , u .ID , badge .Slug ).
112
- Delete (& UserBadge {}); err != nil {
113
- return err
114
- }
110
+ badgeSlugs = append (badgeSlugs , badge .Slug )
111
+ }
112
+ var userBadges []UserBadge
113
+ if err := db .GetEngine (ctx ).Table ("user_badge" ).
114
+ Join ("INNER" , "badge" , "badge.id = `user_badge`.badge_id" ).
115
+ Where ("`user_badge`.user_id = ?" , u .ID ).In ("`badge`.slug" , badgeSlugs ).
116
+ Find (& userBadges ); err != nil {
117
+ return err
118
+ }
119
+ userBadgeIDs := make ([]int64 , 0 , len (userBadges ))
120
+ for _ , ub := range userBadges {
121
+ userBadgeIDs = append (userBadgeIDs , ub .ID )
122
+ }
123
+ if _ , err := db .GetEngine (ctx ).Table ("user_badge" ).In ("id" , userBadgeIDs ).Delete (); err != nil {
124
+ return err
115
125
}
116
126
return nil
117
127
})
0 commit comments