Skip to content

Commit 1848eff

Browse files
committed
refactor(theme):重构主题存储和获取逻辑
1 parent b6f13a2 commit 1848eff

File tree

3 files changed

+114
-50
lines changed

3 files changed

+114
-50
lines changed

app/controllers/adminController/theme.go

+15-16
Original file line numberDiff line numberDiff line change
@@ -28,24 +28,11 @@ func CreateTheme(c *gin.Context) {
2828
Type: data.Type,
2929
ThemeConfig: data.ThemeConfig,
3030
}
31-
themeID, err := themeServices.CreateTheme(record)
31+
err = themeServices.CreateTheme(record)
3232
if err != nil {
3333
_ = c.AbortWithError(200, apiException.ServerError)
3434
return
3535
}
36-
if data.Type == "all" {
37-
studentIDs, err := themeServices.GetAllStudentIDs()
38-
if err != nil {
39-
_ = c.AbortWithError(200, apiException.ServerError)
40-
return
41-
}
42-
43-
_, err = themeServices.AddThemePermission(themeID, studentIDs)
44-
if err != nil {
45-
_ = c.AbortWithError(200, apiException.ServerError)
46-
return
47-
}
48-
}
4936

5037
utils.JsonSuccessResponse(c, nil)
5138
}
@@ -110,7 +97,13 @@ func DeleteTheme(c *gin.Context) {
11097
return
11198
}
11299

113-
err = themeServices.DeleteTheme(data.ID)
100+
theme, err := themeServices.GetThemeByID(data.ID)
101+
if err != nil {
102+
_ = c.AbortWithError(200, apiException.ServerError)
103+
return
104+
}
105+
106+
err = themeServices.DeleteTheme(data.ID, theme.Type)
114107
if err != nil {
115108
_ = c.AbortWithError(200, apiException.ServerError)
116109
return
@@ -138,7 +131,13 @@ func AddThemePermission(c *gin.Context) {
138131
return
139132
}
140133

141-
invalidStudentIDs, err := themeServices.AddThemePermission(data.ThemeID, data.StudentID)
134+
theme, err := themeServices.GetThemeByID(data.ThemeID)
135+
if err != nil {
136+
_ = c.AbortWithError(200, apiException.ServerError)
137+
return
138+
}
139+
140+
invalidStudentIDs, err := themeServices.AddThemePermission(data.ThemeID, data.StudentID, theme.Type)
142141
if err != nil {
143142
_ = c.AbortWithError(200, apiException.ServerError)
144143
return

app/services/themeServices/themePermissionService.go

+69-25
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,19 @@ import (
44
"encoding/json"
55
"errors"
66
"gorm.io/gorm"
7+
"strconv"
8+
"wejh-go/app/config"
79
"wejh-go/app/models"
810
"wejh-go/config/database"
911
)
1012

11-
func AddThemePermission(themeID int, reqStudentIDs []string) ([]string, error) {
13+
func AddThemePermission(themeID int, reqStudentIDs []string, themeType string) ([]string, error) {
14+
if themeType == "all" {
15+
return nil, nil
16+
}
17+
1218
var studentIDs []string
1319
var invalidStudentIDs []string
14-
1520
if len(reqStudentIDs) > 0 {
1621
var existingUsers []models.User
1722
err := database.DB.Select("student_id").Where("student_id IN ?", reqStudentIDs).Find(&existingUsers).Error
@@ -32,14 +37,10 @@ func AddThemePermission(themeID int, reqStudentIDs []string) ([]string, error) {
3237
}
3338
}
3439
} else {
35-
var users []models.User
36-
err := database.DB.Select("student_id").Find(&users).Error
37-
if err != nil {
38-
return nil, err
39-
}
40-
for _, user := range users {
41-
studentIDs = append(studentIDs, user.StudentID)
42-
}
40+
return nil, errors.New("reqStudentIDs is invalid")
41+
}
42+
if len(studentIDs) == 0 {
43+
return invalidStudentIDs, nil
4344
}
4445

4546
var permissions []models.ThemePermission
@@ -106,6 +107,18 @@ func UpdateCurrentTheme(id int, studentID string) error {
106107
return err
107108
}
108109

110+
var allThemes []models.Theme
111+
err = database.DB.Where("type = ?", "all").Find(&allThemes).Error
112+
if err != nil {
113+
return err
114+
}
115+
116+
for _, theme := range allThemes {
117+
if !containThemeID(themePermissionData.ThemeIDs, theme.ID) {
118+
themePermissionData.ThemeIDs = append(themePermissionData.ThemeIDs, theme.ID)
119+
}
120+
}
121+
109122
if !containThemeID(themePermissionData.ThemeIDs, id) {
110123
return errors.New("the theme ID is not in the user's permission list")
111124
}
@@ -133,11 +146,25 @@ func GetThemeNameByID(themePermission models.ThemePermission) ([]string, error)
133146
if err != nil {
134147
return nil, err
135148
}
149+
136150
var themes []models.Theme
137151
err = database.DB.Where("id IN ?", themePermissionData.ThemeIDs).Find(&themes).Error
138152
if err != nil {
139153
return nil, err
140154
}
155+
156+
var allThemes []models.Theme
157+
err = database.DB.Where("type = ?", "all").Find(&allThemes).Error
158+
if err != nil {
159+
return nil, err
160+
}
161+
162+
for _, allTheme := range allThemes {
163+
if !containThemeID(themePermissionData.ThemeIDs, allTheme.ID) {
164+
themes = append(themes, allTheme)
165+
}
166+
}
167+
141168
var themeNames []string
142169
for _, theme := range themes {
143170
themeNames = append(themeNames, theme.Name)
@@ -151,11 +178,25 @@ func GetThemesByID(themePermission models.ThemePermission) ([]models.Theme, erro
151178
if err != nil {
152179
return nil, err
153180
}
181+
154182
var themes []models.Theme
155183
err = database.DB.Where("id IN ?", themePermissionData.ThemeIDs).Find(&themes).Error
156184
if err != nil {
157185
return nil, err
158186
}
187+
188+
var allThemes []models.Theme
189+
err = database.DB.Where("type = ?", "all").Find(&allThemes).Error
190+
if err != nil {
191+
return nil, err
192+
}
193+
194+
for _, allTheme := range allThemes {
195+
if !containThemeID(themePermissionData.ThemeIDs, allTheme.ID) {
196+
themes = append(themes, allTheme)
197+
}
198+
}
199+
159200
return themes, nil
160201
}
161202

@@ -164,29 +205,32 @@ func AddDefaultThemePermission(studentID string) error {
164205
err := database.DB.Where("student_id = ?", studentID).First(&existingPermission).Error
165206
if err != nil {
166207
if err == gorm.ErrRecordNotFound {
167-
var themes []models.Theme
168-
err := database.DB.Where("type = ?", "all").Find(&themes).Error
169-
if err != nil {
170-
return err
171-
}
172-
if len(themes) == 0 {
173-
return errors.New("no themes found with type 'all'")
174-
}
175-
176-
var themeIDs []int
177-
for _, theme := range themes {
178-
themeIDs = append(themeIDs, theme.ID)
208+
themePermissionData := models.ThemePermissionData{
209+
ThemeIDs: []int{},
179210
}
180-
var themePermissionData models.ThemePermissionData
181-
themePermissionData.ThemeIDs = themeIDs
182211
permission, err := json.Marshal(themePermissionData)
183212
if err != nil {
184213
return err
185214
}
186215

216+
var defaultThemeID int
217+
defaultThemeIDStr := config.GetDefaultThemeKey()
218+
if defaultThemeIDStr != "" {
219+
defaultThemeID, err = strconv.Atoi(defaultThemeIDStr)
220+
if err != nil {
221+
return err
222+
}
223+
} else {
224+
var theme models.Theme
225+
if err := database.DB.Model(models.Theme{}).Where("type = ?", "all").First(&theme).Error; err != nil {
226+
return err
227+
}
228+
defaultThemeID = theme.ID
229+
}
230+
187231
newPermission := models.ThemePermission{
188232
StudentID: studentID,
189-
CurrentThemeID: themeIDs[0],
233+
CurrentThemeID: defaultThemeID,
190234
ThemePermission: string(permission),
191235
}
192236

app/services/themeServices/themeService.go

+30-9
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package themeServices
22

33
import (
44
"encoding/json"
5+
"strconv"
6+
"wejh-go/app/config"
57
"wejh-go/app/models"
68
"wejh-go/config/database"
79
)
@@ -12,9 +14,9 @@ func CheckThemeExist(id int) error {
1214
return result.Error
1315
}
1416

15-
func CreateTheme(record models.Theme) (int, error) {
17+
func CreateTheme(record models.Theme) error {
1618
result := database.DB.Create(&record)
17-
return record.ID, result.Error
19+
return result.Error
1820
}
1921

2022
func UpdateTheme(id int, record models.Theme) error {
@@ -34,7 +36,7 @@ func GetThemes() ([]models.Theme, error) {
3436
return themes, result.Error
3537
}
3638

37-
func DeleteTheme(id int) error {
39+
func DeleteTheme(id int, themeType string) error {
3840
tx := database.DB.Begin()
3941
if err := tx.Delete(&models.Theme{}, id).Error; err != nil {
4042
tx.Rollback()
@@ -47,20 +49,36 @@ func DeleteTheme(id int) error {
4749
return err
4850
}
4951

50-
var permissions []models.ThemePermission
51-
if err := tx.Where("current_theme_id = ?", id).Find(&permissions).Error; err != nil {
52-
tx.Rollback()
53-
return err
52+
var defaultThemeID int
53+
defaultThemeIDStr := config.GetDefaultThemeKey()
54+
if defaultThemeIDStr != "" {
55+
defaultThemeID, _ = strconv.Atoi(defaultThemeIDStr)
56+
if id == defaultThemeID {
57+
defaultThemeID = theme.ID
58+
err := config.SetDefaultThemeKey(strconv.Itoa(defaultThemeID))
59+
if err != nil {
60+
tx.Rollback()
61+
return err
62+
}
63+
}
64+
} else {
65+
defaultThemeID = theme.ID
5466
}
5567

5668
if err := tx.Model(&models.ThemePermission{}).
5769
Where("current_theme_id = ?", id).
58-
Update("current_theme_id", theme.ID).Error; err != nil {
70+
Update("current_theme_id", defaultThemeID).Error; err != nil {
5971
tx.Rollback()
6072
return err
6173
}
6274

63-
result := tx.Find(&permissions)
75+
if themeType == "all" {
76+
tx.Commit()
77+
return nil
78+
}
79+
80+
var permissions []models.ThemePermission
81+
result := tx.Model(models.ThemePermission{}).Find(&permissions)
6482
if result.Error != nil {
6583
tx.Rollback()
6684
return result.Error
@@ -77,6 +95,9 @@ func DeleteTheme(id int) error {
7795
updatedThemeIDs := removeThemeID(themePermissionData.ThemeIDs, id)
7896
if len(updatedThemeIDs) != len(themePermissionData.ThemeIDs) {
7997
themePermissionData.ThemeIDs = updatedThemeIDs
98+
if len(updatedThemeIDs) == 0 {
99+
themePermissionData.ThemeIDs = []int{}
100+
}
80101
updatedPermissionMap[permission.StudentID] = themePermissionData
81102
}
82103
}

0 commit comments

Comments
 (0)