@@ -11,16 +11,16 @@ import (
11
11
12
12
// Badge represents a user badge
13
13
type Badge struct {
14
- ID int64 `xorm:"pk autoincr "`
14
+ Slug string `xorm:"UNIQUE "`
15
15
Description string
16
16
ImageURL string
17
17
}
18
18
19
19
// UserBadge represents a user badge
20
20
type UserBadge struct { //nolint:revive
21
- ID int64 `xorm:"pk autoincr"`
22
- BadgeID int64
23
- UserID int64 `xorm:"INDEX"`
21
+ ID int64 `xorm:"pk autoincr"`
22
+ BadgeSlug string
23
+ UserID int64 `xorm:"INDEX"`
24
24
}
25
25
26
26
func init () {
@@ -32,10 +32,81 @@ func init() {
32
32
func GetUserBadges (ctx context.Context , u * User ) ([]* Badge , int64 , error ) {
33
33
sess := db .GetEngine (ctx ).
34
34
Select ("`badge`.*" ).
35
- Join ("INNER" , "user_badge" , "`user_badge`.badge_id =badge.id " ).
35
+ Join ("INNER" , "user_badge" , "`user_badge`.badge_slug =badge.slug " ).
36
36
Where ("user_badge.user_id=?" , u .ID )
37
37
38
38
badges := make ([]* Badge , 0 , 8 )
39
39
count , err := sess .FindAndCount (& badges )
40
40
return badges , count , err
41
41
}
42
+
43
+ // CreateBadge creates a new badge.
44
+ func CreateBadge (ctx context.Context , badge * Badge ) error {
45
+ _ , err := db .GetEngine (ctx ).Insert (badge )
46
+ return err
47
+ }
48
+
49
+ // GetBadge returns a badge
50
+ func GetBadge (ctx context.Context , slug string ) (* Badge , error ) {
51
+ badge := new (Badge )
52
+ has , err := db .GetEngine (ctx ).Where ("slug=?" , slug ).Get (badge )
53
+ if ! has {
54
+ return nil , err
55
+ }
56
+ return badge , err
57
+ }
58
+
59
+ // UpdateBadge updates a badge based on its slug.
60
+ func UpdateBadge (ctx context.Context , badge * Badge ) error {
61
+ _ , err := db .GetEngine (ctx ).Where ("slug=?" , badge .Slug ).Update (badge )
62
+ return err
63
+ }
64
+
65
+ // DeleteBadge deletes a badge.
66
+ func DeleteBadge (ctx context.Context , badge * Badge ) error {
67
+ _ , err := db .GetEngine (ctx ).Delete (badge )
68
+ return err
69
+ }
70
+
71
+ // AddUserBadge adds a badge to a user.
72
+ func AddUserBadge (ctx context.Context , u * User , badge * Badge ) error {
73
+ return AddUserBadges (ctx , u , []* Badge {badge })
74
+ }
75
+
76
+ // AddUserBadges adds badges to a user.
77
+ func AddUserBadges (ctx context.Context , u * User , badges []* Badge ) error {
78
+ return db .WithTx (ctx , func (ctx context.Context ) error {
79
+ for _ , badge := range badges {
80
+ if err := db .Insert (ctx , & UserBadge {
81
+ BadgeSlug : badge .Slug ,
82
+ UserID : u .ID ,
83
+ }); err != nil {
84
+ return err
85
+ }
86
+ }
87
+ return nil
88
+ })
89
+ }
90
+
91
+ // RemoveUserBadge removes a badge from a user.
92
+ func RemoveUserBadge (ctx context.Context , u * User , badge * Badge ) error {
93
+ return RemoveUserBadges (ctx , u , []* Badge {badge })
94
+ }
95
+
96
+ // RemoveUserBadges removes badges from a user.
97
+ func RemoveUserBadges (ctx context.Context , u * User , badges []* Badge ) error {
98
+ return db .WithTx (ctx , func (ctx context.Context ) error {
99
+ for _ , badge := range badges {
100
+ if _ , err := db .GetEngine (ctx ).Where ("user_id=? AND badge_slug=?" , u .ID , badge .Slug ).Delete (& UserBadge {}); err != nil {
101
+ return err
102
+ }
103
+ }
104
+ return nil
105
+ })
106
+ }
107
+
108
+ // RemoveAllUserBadges removes all badges from a user.
109
+ func RemoveAllUserBadges (ctx context.Context , u * User ) error {
110
+ _ , err := db .GetEngine (ctx ).Where ("user_id=?" , u .ID ).Delete (& UserBadge {})
111
+ return err
112
+ }
0 commit comments