Files
goodBaby/api/account/account.go
T
2026-04-06 10:10:31 +08:00

131 lines
3.3 KiB
Go

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"
)
// 添加账号
func HandleAddAccount(c *gin.Context) {
gormDB, err := db.GetGormDB()
if err != nil {
c.JSON(500, gin.H{"code": 500, "data": "服务器内部错误"})
return
}
userInfo, err := user.GetUserInfoByGinCtx(c)
if err != nil {
c.JSON(401, gin.H{"code": 401, "data": "获取用户信息失败"})
return
}
var newAccount model.Account
if err := c.BindJSON(&newAccount); err != nil {
c.JSON(400, gin.H{"code": 400, "data": "输入参数错误"})
return
}
newAccount.UID = userInfo.ID
result := gormDB.Create(&newAccount)
if result.Error != nil {
c.JSON(500, gin.H{"code": 500, "data": "添加账号失败"})
return
}
c.JSON(200, gin.H{"code": 200, "data": "添加账号成功"})
}
// 获取用户的所有账号
func HandleGetAllAccounts(c *gin.Context) {
gormDB, err := db.GetGormDB()
if err != nil {
c.JSON(500, gin.H{"code": 500, "data": "服务器内部错误"})
return
}
userInfo, err := user.GetUserInfoByGinCtx(c)
if err != nil {
c.JSON(401, gin.H{"code": 401, "data": "获取用户信息失败"})
return
}
var accounts []model.Account
result := gormDB.Where("uid = ?", userInfo.ID).Find(&accounts)
if result.Error != nil {
c.JSON(500, gin.H{"code": 500, "data": "获取账号失败"})
return
}
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": "删除账号成功"})
}