127 lines
4.5 KiB
Go
127 lines
4.5 KiB
Go
package learning
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/flipped-aurora/gin-vue-admin/server/global"
|
|
"github.com/flipped-aurora/gin-vue-admin/server/model/learning"
|
|
learningReq "github.com/flipped-aurora/gin-vue-admin/server/model/learning/request"
|
|
)
|
|
|
|
type KnowledgePointService struct{}
|
|
|
|
// CreateKnowledgePoint 创建知识点
|
|
func (knowledgePointService *KnowledgePointService) CreateKnowledgePoint(ctx context.Context, knowledgePoint *learning.KnowledgePoint) (err error) {
|
|
err = global.GVA_DB.WithContext(ctx).Create(knowledgePoint).Error
|
|
return err
|
|
}
|
|
|
|
// DeleteKnowledgePoint 删除知识点
|
|
func (knowledgePointService *KnowledgePointService) DeleteKnowledgePoint(ctx context.Context, ID string) (err error) {
|
|
err = global.GVA_DB.WithContext(ctx).Delete(&learning.KnowledgePoint{}, ID).Error
|
|
return err
|
|
}
|
|
|
|
// DeleteKnowledgePointByIds 批量删除知识点
|
|
func (knowledgePointService *KnowledgePointService) DeleteKnowledgePointByIds(ctx context.Context, IDs []string) (err error) {
|
|
err = global.GVA_DB.WithContext(ctx).Delete(&[]learning.KnowledgePoint{}, "id in ?", IDs).Error
|
|
return err
|
|
}
|
|
|
|
// UpdateKnowledgePoint 更新知识点
|
|
func (knowledgePointService *KnowledgePointService) UpdateKnowledgePoint(ctx context.Context, knowledgePoint learning.KnowledgePoint) (err error) {
|
|
err = global.GVA_DB.WithContext(ctx).Model(&learning.KnowledgePoint{}).Where("id = ?", knowledgePoint.ID).Updates(&knowledgePoint).Error
|
|
return err
|
|
}
|
|
|
|
// GetKnowledgePoint 根据ID获取知识点
|
|
func (knowledgePointService *KnowledgePointService) GetKnowledgePoint(ctx context.Context, ID string) (knowledgePoint learning.KnowledgePoint, err error) {
|
|
err = global.GVA_DB.WithContext(ctx).Where("id = ?", ID).First(&knowledgePoint).Error
|
|
if err != nil {
|
|
return
|
|
}
|
|
// 手动查询关联的章节信息
|
|
if knowledgePoint.ChapterId != 0 {
|
|
var chapter learning.Chapter
|
|
chapterErr := global.GVA_DB.WithContext(ctx).Where("id = ?", knowledgePoint.ChapterId).First(&chapter).Error
|
|
if chapterErr == nil {
|
|
knowledgePoint.Chapter = chapter
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
// GetKnowledgePointInfoList 分页获取知识点列表
|
|
func (knowledgePointService *KnowledgePointService) GetKnowledgePointInfoList(ctx context.Context, info learningReq.KnowledgePointSearch) (list []learning.KnowledgePoint, total int64, err error) {
|
|
limit := info.PageSize
|
|
offset := info.PageSize * (info.Page - 1)
|
|
// 创建db
|
|
db := global.GVA_DB.WithContext(ctx).Model(&learning.KnowledgePoint{})
|
|
var knowledgePoints []learning.KnowledgePoint
|
|
// 如果有条件搜索 下方会自动创建搜索语句
|
|
if info.StartCreatedAt != nil && info.EndCreatedAt != nil {
|
|
db = db.Where("created_at BETWEEN ? AND ?", info.StartCreatedAt, info.EndCreatedAt)
|
|
}
|
|
if info.Title != "" {
|
|
db = db.Where("title LIKE ?", "%"+info.Title+"%")
|
|
}
|
|
if info.Status != "" {
|
|
db = db.Where("status = ?", info.Status)
|
|
}
|
|
if info.ChapterId != 0 {
|
|
db = db.Where("chapter_id = ?", info.ChapterId)
|
|
}
|
|
err = db.Count(&total).Error
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
if limit != 0 {
|
|
db = db.Limit(limit).Offset(offset)
|
|
}
|
|
|
|
err = db.Order("sort asc, created_at desc").Find(&knowledgePoints).Error
|
|
if err != nil {
|
|
return knowledgePoints, total, err
|
|
}
|
|
|
|
// 手动查询关联的章节信息
|
|
chapterIds := make([]uint, 0)
|
|
chapterMap := make(map[uint]learning.Chapter)
|
|
|
|
for _, kp := range knowledgePoints {
|
|
if kp.ChapterId != 0 {
|
|
chapterIds = append(chapterIds, kp.ChapterId)
|
|
}
|
|
}
|
|
|
|
if len(chapterIds) > 0 {
|
|
var chapters []learning.Chapter
|
|
global.GVA_DB.WithContext(ctx).Where("id in ?", chapterIds).Find(&chapters)
|
|
for _, chapter := range chapters {
|
|
chapterMap[chapter.ID] = chapter
|
|
}
|
|
|
|
// 为每个知识点设置章节信息
|
|
for i := range knowledgePoints {
|
|
if chapter, exists := chapterMap[knowledgePoints[i].ChapterId]; exists {
|
|
knowledgePoints[i].Chapter = chapter
|
|
}
|
|
}
|
|
}
|
|
|
|
return knowledgePoints, total, err
|
|
}
|
|
|
|
// GetKnowledgePointsByChapter 根据章节ID获取知识点列表
|
|
func (knowledgePointService *KnowledgePointService) GetKnowledgePointsByChapter(ctx context.Context, chapterId uint) (list []learning.KnowledgePoint, err error) {
|
|
err = global.GVA_DB.WithContext(ctx).Where("chapter_id = ? AND status = ?", chapterId, "published").Order("sort asc, created_at asc").Find(&list).Error
|
|
return
|
|
}
|
|
|
|
// UpdateKnowledgePointStatus 更新知识点状态
|
|
func (knowledgePointService *KnowledgePointService) UpdateKnowledgePointStatus(ctx context.Context, ID string, status string) (err error) {
|
|
err = global.GVA_DB.WithContext(ctx).Model(&learning.KnowledgePoint{}).Where("id = ?", ID).Update("status", status).Error
|
|
return err
|
|
}
|