87 lines
3.0 KiB
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
|
|
}
|