diff --git a/server/internal/controller/api/mycourse/mycourse.go b/server/internal/controller/api/mycourse/mycourse.go new file mode 100644 index 0000000..8a2ce94 --- /dev/null +++ b/server/internal/controller/api/mycourse/mycourse.go @@ -0,0 +1,18 @@ +// Package mycourse +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2023 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package mycourse + +import ( + "hotgo/api/api/mycourse" +) + +// ControllerV1 我的课程控制器v1 +type ControllerV1 struct{} + +// NewV1 创建我的课程控制器v1 +func NewV1() mycourse.IMyCourseV1 { + return &ControllerV1{} +} diff --git a/server/internal/controller/api/mycourse/mycourse_v1_list.go b/server/internal/controller/api/mycourse/mycourse_v1_list.go new file mode 100644 index 0000000..ad91946 --- /dev/null +++ b/server/internal/controller/api/mycourse/mycourse_v1_list.go @@ -0,0 +1,118 @@ +package mycourse + +import ( + "context" + "hotgo/api/api/mycourse/v1" + "hotgo/internal/library/contexts" + + "github.com/gogf/gf/v2/errors/gerror" + "github.com/gogf/gf/v2/os/gtime" +) + +// MyCourseList 获取我的课程列表 +func (c *ControllerV1) MyCourseList(ctx context.Context, req *v1.MyCourseListReq) (res *v1.MyCourseListRes, err error) { + // 从JWT中间件解析出的用户ID + userId := contexts.GetUserId(ctx) + if userId <= 0 { + err = gerror.New("用户未登录") + return + } + + // 模拟数据 - 实际项目中应该从数据库查询 + mockData := []*v1.MyCourseItem{ + { + Id: 1, + Title: "Go语言基础教程", + Description: "从零开始学习Go语言,掌握基础语法和核心概念", + Cover: "https://example.com/covers/go-basic.jpg", + Instructor: "张老师", + Duration: 7200, // 2小时 + Progress: 75, + Status: "learning", + EnrollTime: gtime.New("2024-01-15 10:30:00"), + LastStudyTime: gtime.New("2024-01-20 14:20:00"), + }, + { + Id: 2, + Title: "Vue.js实战开发", + Description: "深入学习Vue.js框架,构建现代化前端应用", + Cover: "https://example.com/covers/vue-practice.jpg", + Instructor: "李老师", + Duration: 10800, // 3小时 + Progress: 100, + Status: "completed", + EnrollTime: gtime.New("2024-01-10 09:15:00"), + LastStudyTime: gtime.New("2024-01-18 16:45:00"), + }, + { + Id: 3, + Title: "MySQL数据库优化", + Description: "学习MySQL性能优化技巧和最佳实践", + Cover: "https://example.com/covers/mysql-optimization.jpg", + Instructor: "王老师", + Duration: 5400, // 1.5小时 + Progress: 45, + Status: "learning", + EnrollTime: gtime.New("2024-01-20 14:00:00"), + LastStudyTime: gtime.New("2024-01-22 10:30:00"), + }, + { + Id: 4, + Title: "Python数据分析", + Description: "使用Python进行数据分析和可视化", + Cover: "https://example.com/covers/python-analysis.jpg", + Instructor: "赵老师", + Duration: 9000, // 2.5小时 + Progress: 100, + Status: "completed", + EnrollTime: gtime.New("2024-01-05 11:00:00"), + LastStudyTime: gtime.New("2024-01-12 15:30:00"), + }, + } + + // 根据状态筛选 + var filteredData []*v1.MyCourseItem + if req.Status != "" { + for _, item := range mockData { + if item.Status == req.Status { + filteredData = append(filteredData, item) + } + } + } else { + filteredData = mockData + } + + totalCount := len(filteredData) + + // 分页处理 + pageNum := req.Page + pageSize := req.PageSize + if pageNum <= 0 { + pageNum = 1 + } + if pageSize <= 0 { + pageSize = 10 + } + + start := (pageNum - 1) * pageSize + end := start + pageSize + + var list []*v1.MyCourseItem + if start >= totalCount { + list = []*v1.MyCourseItem{} + } else { + if end > totalCount { + end = totalCount + } + list = filteredData[start:end] + } + + res = &v1.MyCourseListRes{ + List: list, + Total: totalCount, + Page: pageNum, + PageSize: pageSize, + } + + return +} diff --git a/server/internal/router/api.go b/server/internal/router/api.go index c954785..6f5ed8b 100644 --- a/server/internal/router/api.go +++ b/server/internal/router/api.go @@ -10,6 +10,7 @@ import ( "hotgo/internal/consts" "hotgo/internal/controller/api/lesson" "hotgo/internal/controller/api/member" + "hotgo/internal/controller/api/mycourse" "hotgo/internal/controller/api/pay" "hotgo/internal/controller/api/users" "hotgo/internal/service" @@ -26,7 +27,8 @@ func Api(ctx context.Context, group *ghttp.RouterGroup) { ) group.Middleware(service.Middleware().ApiAuth) group.Bind( - member.NewV1(), // 管理员 + member.NewV1(), // 管理员 + mycourse.NewV1(), // 我的课程 ) })