Study/server/service/learning/knowledge_point.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
}