205 lines
5.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package panel
import (
"encoding/json"
"sun-panel/api/api_v1/common/apiData/commonApiStructs"
"sun-panel/api/api_v1/common/apiData/panelApiStructs"
"sun-panel/api/api_v1/common/apiReturn"
"sun-panel/api/api_v1/common/base"
"sun-panel/global"
"sun-panel/lib/siteFavicon"
"sun-panel/models"
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
"gorm.io/gorm"
)
type ItemIcon struct {
}
func (a *ItemIcon) Edit(c *gin.Context) {
userInfo, _ := base.GetCurrentUserInfo(c)
req := models.ItemIcon{}
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
apiReturn.ErrorParamFomat(c, err.Error())
return
}
if req.ItemIconGroupId == 0 {
apiReturn.Error(c, "Group is mandatory")
return
}
req.UserId = userInfo.ID
// json转字符串
if j, err := json.Marshal(req.Icon); err == nil {
req.IconJson = string(j)
}
if req.ID != 0 {
// 修改
updateField := []string{"IconJson", "Icon", "Title", "Url", "LanUrl", "Description", "OpenMethod", "GroupId", "UserId", "ItemIconGroupId"}
if req.Sort != 0 {
updateField = append(updateField, "Sort")
}
global.Db.Model(&models.ItemIcon{}).
Select(updateField).
Where("id=?", req.ID).Updates(&req)
} else {
req.Sort = 9999
// 创建
global.Db.Create(&req)
}
apiReturn.SuccessData(c, req)
}
// 添加多个图标
func (a *ItemIcon) AddMultiple(c *gin.Context) {
userInfo, _ := base.GetCurrentUserInfo(c)
// type Request
req := []models.ItemIcon{}
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
apiReturn.ErrorParamFomat(c, err.Error())
return
}
for i := 0; i < len(req); i++ {
if req[i].ItemIconGroupId == 0 {
apiReturn.ErrorParamFomat(c, "Group is mandatory")
return
}
req[i].UserId = userInfo.ID
// json转字符串
if j, err := json.Marshal(req[i].Icon); err == nil {
req[i].IconJson = string(j)
}
}
global.Db.Create(&req)
apiReturn.SuccessData(c, req)
}
// // 获取详情
// func (a *ItemIcon) GetInfo(c *gin.Context) {
// req := systemApiStructs.AiDrawGetInfoReq{}
// if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
// apiReturn.ErrorParamFomat(c, err.Error())
// return
// }
// userInfo, _ := base.GetCurrentUserInfo(c)
// aiDraw := models.AiDraw{}
// aiDraw.ID = req.ID
// if err := aiDraw.GetInfo(global.Db); err != nil {
// if err == gorm.ErrRecordNotFound {
// apiReturn.Error(c, "不存在记录")
// return
// }
// apiReturn.ErrorDatabase(c, err.Error())
// return
// }
// if userInfo.ID != aiDraw.UserID {
// apiReturn.ErrorNoAccess(c)
// return
// }
// apiReturn.SuccessData(c, aiDraw)
// }
func (a *ItemIcon) GetListByGroupId(c *gin.Context) {
req := models.ItemIcon{}
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
apiReturn.ErrorParamFomat(c, err.Error())
return
}
userInfo, _ := base.GetCurrentUserInfo(c)
itemIcons := []models.ItemIcon{}
if err := global.Db.Order("sort ,created_at").Find(&itemIcons, "item_icon_group_id = ? AND user_id=?", req.ItemIconGroupId, userInfo.ID).Error; err != nil {
apiReturn.ErrorDatabase(c, err.Error())
return
}
for k, v := range itemIcons {
json.Unmarshal([]byte(v.IconJson), &itemIcons[k].Icon)
}
apiReturn.SuccessListData(c, itemIcons, 0)
}
func (a *ItemIcon) Deletes(c *gin.Context) {
req := commonApiStructs.RequestDeleteIds[uint]{}
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
apiReturn.ErrorParamFomat(c, err.Error())
return
}
userInfo, _ := base.GetCurrentUserInfo(c)
if err := global.Db.Delete(&models.ItemIcon{}, "id in ? AND user_id=?", req.Ids, userInfo.ID).Error; err != nil {
apiReturn.ErrorDatabase(c, err.Error())
return
}
apiReturn.Success(c)
}
// 保存排序
func (a *ItemIcon) SaveSort(c *gin.Context) {
req := panelApiStructs.ItemIconSaveSortRequest{}
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
apiReturn.ErrorParamFomat(c, err.Error())
return
}
userInfo, _ := base.GetCurrentUserInfo(c)
transactionErr := global.Db.Transaction(func(tx *gorm.DB) error {
// 在事务中执行一些 db 操作(从这里开始,您应该使用 'tx' 而不是 'db'
for _, v := range req.SortItems {
if err := tx.Model(&models.ItemIcon{}).Where("user_id=? AND id=? AND item_icon_group_id=?", userInfo.ID, v.Id, req.ItemIconGroupId).Update("sort", v.Sort).Error; err != nil {
// 返回任何错误都会回滚事务
return err
}
}
// 返回 nil 提交事务
return nil
})
if transactionErr != nil {
apiReturn.ErrorDatabase(c, transactionErr.Error())
return
}
apiReturn.Success(c)
}
func (a *ItemIcon) GetSiteFavicon(c *gin.Context) {
req := panelApiStructs.ItemIconGetSiteFaviconReq{}
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
apiReturn.ErrorParamFomat(c, err.Error())
return
}
resp := panelApiStructs.ItemIconGetSiteFaviconResp{}
if iconUrl, ok := siteFavicon.GetOneFaviconURL(req.Url); ok {
resp.IconUrl = iconUrl
apiReturn.SuccessData(c, resp)
return
}
apiReturn.Error(c, "acquisition failed")
}