Study/server/service/learning/course.go

87 lines
3.0 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 CourseService struct{}
// CreateCourse 创建课程
func (courseService *CourseService) CreateCourse(ctx context.Context, course *learning.Course) (err error) {
err = global.GVA_DB.WithContext(ctx).Create(course).Error
return err
}
// DeleteCourse 删除课程
func (courseService *CourseService) DeleteCourse(ctx context.Context, ID string) (err error) {
err = global.GVA_DB.WithContext(ctx).Delete(&learning.Course{}, ID).Error
return err
}
// DeleteCourseByIds 批量删除课程
func (courseService *CourseService) DeleteCourseByIds(ctx context.Context, IDs []string) (err error) {
err = global.GVA_DB.WithContext(ctx).Delete(&[]learning.Course{}, "id in ?", IDs).Error
return err
}
// UpdateCourse 更新课程
func (courseService *CourseService) UpdateCourse(ctx context.Context, course learning.Course) (err error) {
err = global.GVA_DB.WithContext(ctx).Model(&learning.Course{}).Where("id = ?", course.ID).Updates(&course).Error
return err
}
// GetCourse 根据ID获取课程
func (courseService *CourseService) GetCourse(ctx context.Context, ID string) (course learning.Course, err error) {
err = global.GVA_DB.WithContext(ctx).Where("id = ?", ID).First(&course).Error
return
}
// GetCourseInfoList 分页获取课程列表
func (courseService *CourseService) GetCourseInfoList(ctx context.Context, info learningReq.CourseSearch) (list []learning.Course, total int64, err error) {
limit := info.PageSize
offset := info.PageSize * (info.Page - 1)
// 创建db
db := global.GVA_DB.WithContext(ctx).Model(&learning.Course{})
var courses []learning.Course
// 如果有条件搜索 下方会自动创建搜索语句
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.Difficulty != "" {
db = db.Where("difficulty = ?", info.Difficulty)
}
err = db.Count(&total).Error
if err != nil {
return
}
if limit != 0 {
db = db.Limit(limit).Offset(offset)
}
err = db.Order("sort desc, created_at desc").Find(&courses).Error
return courses, total, err
}
// GetPublishedCourses 获取已发布的课程列表(供学员选择)
func (courseService *CourseService) GetPublishedCourses(ctx context.Context) (list []learning.Course, err error) {
err = global.GVA_DB.WithContext(ctx).Where("status = ?", "published").Order("sort desc, created_at desc").Find(&list).Error
return
}
// UpdateCourseStatus 更新课程状态
func (courseService *CourseService) UpdateCourseStatus(ctx context.Context, ID string, status string) (err error) {
err = global.GVA_DB.WithContext(ctx).Model(&learning.Course{}).Where("id = ?", ID).Update("status", status).Error
return err
}