@@ -105,13 +105,23 @@ func RemoveUserBadge(ctx context.Context, u *User, badge *Badge) error {
105105// RemoveUserBadges removes badges from a user.
106106func RemoveUserBadges (ctx context.Context , u * User , badges []* Badge ) error {
107107 return db .WithTx (ctx , func (ctx context.Context ) error {
108+ badgeSlugs := make ([]string , 0 , len (badges ))
108109 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
115125 }
116126 return nil
117127 })
0 commit comments