90 lines
1.7 KiB
Go
90 lines
1.7 KiB
Go
package service
|
|
|
|
import (
|
|
"errors"
|
|
"knowledge/api/dao"
|
|
"knowledge/api/model"
|
|
"knowledge/api/requests"
|
|
"knowledge/global"
|
|
"strconv"
|
|
)
|
|
|
|
type LabelService struct {
|
|
}
|
|
|
|
// AddLabel 新增标签
|
|
func (r *LabelService) AddLabel(req requests.AddLabel) (bool, error) {
|
|
labelDao := dao.LabelDao{}
|
|
|
|
var parentId int64
|
|
if req.LabelLevel != 1 {
|
|
if req.ParentId == "" || req.ParentId == "0" {
|
|
return false, errors.New("请填写父级标签")
|
|
}
|
|
|
|
var err error
|
|
parentId, err = strconv.ParseInt(req.ParentId, 10, 64)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
|
|
_, err = labelDao.GetLabelFirstById(parentId)
|
|
if err != nil {
|
|
return false, errors.New("父级标签错误")
|
|
}
|
|
}
|
|
|
|
// 开始事务
|
|
tx := global.Db.Begin()
|
|
defer func() {
|
|
if r := recover(); r != nil {
|
|
tx.Rollback()
|
|
}
|
|
}()
|
|
|
|
// 新增题目
|
|
label := &model.Label{
|
|
LabelName: req.LabelName,
|
|
ParentId: parentId,
|
|
LabelLevel: req.LabelLevel,
|
|
}
|
|
|
|
label, err := labelDao.AddLabel(tx, label)
|
|
if err != nil {
|
|
tx.Rollback()
|
|
return false, errors.New("新增失败")
|
|
}
|
|
|
|
tx.Commit()
|
|
return true, nil
|
|
}
|
|
|
|
// PutLabel 修改标签
|
|
func (r *LabelService) PutLabel(labelId int64, req requests.PutLabel) (bool, error) {
|
|
labelDao := dao.LabelDao{}
|
|
_, err := labelDao.GetLabelFirstById(labelId)
|
|
if err != nil {
|
|
return false, errors.New("标签不存在")
|
|
}
|
|
|
|
// 开始事务
|
|
tx := global.Db.Begin()
|
|
defer func() {
|
|
if r := recover(); r != nil {
|
|
tx.Rollback()
|
|
}
|
|
}()
|
|
|
|
labelData := make(map[string]interface{})
|
|
labelData["label_name"] = req.LabelName
|
|
|
|
err = labelDao.EditLabelById(tx, labelId, labelData)
|
|
if err != nil {
|
|
tx.Rollback()
|
|
return false, errors.New(err.Error())
|
|
}
|
|
|
|
tx.Commit()
|
|
return true, nil
|
|
}
|