knowledge-api/api/service/QuestionQaItem.go
2024-11-25 15:20:23 +08:00

130 lines
3.1 KiB
Go

package service
import (
"errors"
"knowledge/api/dao"
"knowledge/api/requests"
"knowledge/global"
"strconv"
)
type QuestionQaItemService struct {
}
// DeleteQuestionQaItem 删除问答题库明细
func (r *QuestionQaItemService) DeleteQuestionQaItem(req requests.DeleteQuestionQaItem) (bool, error) {
questionQaItemDao := dao.QuestionQaItemDao{}
qaId, err := strconv.ParseInt(req.QaId, 10, 64)
if err != nil {
return false, errors.New("删除失败")
}
// 获取题库数据
questionQaDao := dao.QuestionQaDao{}
questionQa, err := questionQaDao.GetQuestionQaById(qaId)
if err != nil {
return false, errors.New("题库错误")
}
// 获取题库明细数据
questionQaItems, err := questionQaItemDao.GetQuestionQaItemListByQaId(qaId)
if err != nil {
return false, errors.New("题库错误")
}
// 检测剩余题目数量是否满足使用
if questionQa.QaQuantity > (len(questionQaItems) - len(req.ItemId)) {
return false, errors.New("删除后剩余题目不满足题库使用")
}
// 开始事务
tx := global.Db.Begin()
defer func() {
if r := recover(); r != nil {
tx.Rollback()
}
}()
for _, itemId := range req.ItemId {
// 将字符串转换为int64类型
itemId, err := strconv.ParseInt(itemId, 10, 64)
if err != nil {
tx.Rollback()
return false, errors.New("删除失败")
}
_, err = questionQaItemDao.GetQuestionQaItemById(itemId)
if err != nil {
tx.Rollback()
return false, errors.New("明细不存在")
}
err = questionQaItemDao.DeleteQuestionQaItemById(tx, itemId)
if err != nil {
tx.Rollback()
return false, errors.New("删除失败")
}
}
tx.Commit()
return true, nil
}
// PutQuestionQaItemMust 修改必选
func (r *QuestionQaItemService) PutQuestionQaItemMust(itemId int64, req requests.PutQuestionQaItemMust) (bool, error) {
questionQaItemDao := dao.QuestionQaItemDao{}
questionQaItem, err := questionQaItemDao.GetQuestionQaItemById(itemId)
if err != nil {
return false, errors.New("题目不存在")
}
// 分享密码
if req.IsMustSelect == questionQaItem.IsMustSelect {
return true, nil
}
// 检测必选数量
if req.IsMustSelect == 1 {
// 获取题库数据
questionQaDao := dao.QuestionQaDao{}
questionQa, err := questionQaDao.GetQuestionQaById(questionQaItem.QaId)
if err != nil {
return false, errors.New("题库错误")
}
maps := make(map[string]interface{})
maps["qa_id"] = questionQaItem.QaId
maps["is_must_select"] = 1
questionQaItems, err := questionQaItemDao.GetQuestionQaItemList(maps)
if err != nil {
return false, errors.New("内部错误")
}
if len(questionQaItems) >= questionQa.QaQuantity {
return false, errors.New("必选题目已超出题库所需数量")
}
}
// 开始事务
tx := global.Db.Begin()
defer func() {
if r := recover(); r != nil {
tx.Rollback()
}
}()
questionQaItemData := make(map[string]interface{})
questionQaItemData["is_must_select"] = req.IsMustSelect
err = questionQaItemDao.EditQuestionQaItemById(tx, itemId, questionQaItemData)
if err != nil {
tx.Rollback()
return false, errors.New(err.Error())
}
tx.Commit()
return true, nil
}