diff --git a/api/account/account.go b/api/account/account.go index 471b5f6..5f520f3 100644 --- a/api/account/account.go +++ b/api/account/account.go @@ -1,7 +1,10 @@ package account import ( + "strconv" + "github.com/gin-gonic/gin" + "github.com/ssdomei232/goodBaby/api/rule" "github.com/ssdomei232/goodBaby/api/user" "github.com/ssdomei232/goodBaby/handler/db" "github.com/ssdomei232/goodBaby/model" @@ -60,3 +63,70 @@ func HandleGetAllAccounts(c *gin.Context) { c.JSON(200, gin.H{"code": 200, "data": accounts}) } + +// 检查删除账号请求 +// +// 删除账号会同时删除相关规则,先请求该接口获取受影响的规则 +func HandleCheckDeleteAccount(c *gin.Context) { + userInfo, err := user.GetUserInfoByGinCtx(c) + if err != nil { + c.JSON(401, gin.H{"code": 401, "data": "获取用户信息失败"}) + return + } + + accountID, err := strconv.Atoi(c.Param("accountID")) + if err != nil { + c.JSON(400, gin.H{"code": 400, "data": "账号ID格式错误"}) + return + } + + rules, err := getRulesByAccountID(uint(accountID), userInfo.ID) + if err != nil { + c.JSON(500, gin.H{"code": 500, "data": "获取相关规则失败"}) + return + } + + c.JSON(200, gin.H{"code": 200, "data": rules}) +} + +// 删除账号 +func HandleDeleteAccount(c *gin.Context) { + userInfo, err := user.GetUserInfoByGinCtx(c) + if err != nil { + c.JSON(401, gin.H{"code": 401, "data": "获取用户信息失败"}) + return + } + + accountID, err := strconv.Atoi(c.Param("accountID")) + if err != nil { + c.JSON(400, gin.H{"code": 400, "data": "账号ID格式错误"}) + return + } + + rules, err := getRulesByAccountID(uint(accountID), userInfo.ID) + if err != nil { + c.JSON(500, gin.H{"code": 500, "data": "获取相关规则失败"}) + return + } + + for _, oneRule := range rules { + err = rule.DeleteRuleByID(oneRule.ID, userInfo.ID) + if err != nil { + c.JSON(500, gin.H{"code": 500, "data": "删除相关规则失败"}) + return + } + } + + gormDB, err := db.GetGormDB() + if err != nil { + c.JSON(500, gin.H{"code": 500, "data": "服务器内部错误"}) + return + } + + result := gormDB.Where("id = ? AND uid = ?", accountID, userInfo.ID).Delete(&model.Account{}) + if result.Error != nil { + c.JSON(500, gin.H{"code": 500, "data": "删除账号失败"}) + return + } + c.JSON(200, gin.H{"code": 200, "data": "删除账号成功"}) +} diff --git a/api/account/tool.go b/api/account/tool.go new file mode 100644 index 0000000..1240e4a --- /dev/null +++ b/api/account/tool.go @@ -0,0 +1,21 @@ +package account + +import ( + "github.com/ssdomei232/goodBaby/handler/db" + "github.com/ssdomei232/goodBaby/model" +) + +// 获取账号相关的规则列表 +func getRulesByAccountID(accountID uint, uid uint) ([]*model.Rule, error) { + gormDB, err := db.GetGormDB() + if err != nil { + return nil, err + } + + var rules []*model.Rule + result := gormDB.Where("account_id = ? AND uid = ?", accountID, uid).Find(&rules) + if result.Error != nil { + return nil, result.Error + } + return rules, nil +} diff --git a/main.go b/main.go index 40871cf..5a82dd3 100644 --- a/main.go +++ b/main.go @@ -33,6 +33,7 @@ func main() { authorized.DELETE("/rules/:ruleID", rule.HandleDeleteRule) authorized.GET("/accounts", account.HandleGetAllAccounts) authorized.POST("/accounts", account.HandleAddAccount) + authorized.GET("/accounts/:accountID/check", account.HandleCheckDeleteAccount) } r.Run(":8088")