init: 第一次提交
- 以实现登录获取个人信息和课程 - 实现了获取视频记录 - 实现了学习接口
This commit is contained in:
173
internal/handler/ckwk.go
Normal file
173
internal/handler/ckwk.go
Normal file
@@ -0,0 +1,173 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"ckwk/internal/ckwk"
|
||||
"ckwk/internal/dto"
|
||||
"ckwk/pkg/log"
|
||||
"fmt"
|
||||
"net/http"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
type WKHandler struct {
|
||||
Session *ckwk.SessionManager
|
||||
}
|
||||
|
||||
func NewWKHandler() *WKHandler {
|
||||
return &WKHandler{
|
||||
Session: ckwk.NewSessionManager(),
|
||||
}
|
||||
}
|
||||
|
||||
func (h *WKHandler) Login(ctx *gin.Context) {
|
||||
var req dto.LoginReq
|
||||
if err := ctx.ShouldBindJSON(&req); err != nil {
|
||||
ctx.JSON(200, dto.Error(-1, "请求参数错误"))
|
||||
return
|
||||
}
|
||||
log.Debug("请求数据", zap.Any("req", req))
|
||||
var cookies = []*http.Cookie{
|
||||
{
|
||||
Name: "token",
|
||||
Value: req.Token,
|
||||
Path: "/"},
|
||||
}
|
||||
wk := ckwk.NewWK(req.Username, req.Password, req.Host, cookies)
|
||||
if wk == nil {
|
||||
ctx.JSON(200, dto.Error(-1, "登录失败:请提供账号密码或有效的 Token,并确保 Host 正确"))
|
||||
return
|
||||
}
|
||||
|
||||
userinfo, err := wk.UserInfoGet()
|
||||
if err != nil {
|
||||
ctx.JSON(200, dto.Error(-1, err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
courses, err := wk.CourseGet(req.Status)
|
||||
if err != nil {
|
||||
ctx.JSON(200, dto.Error(-1, err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
sessionID := h.Session.Store(wk)
|
||||
|
||||
ctx.JSON(200, dto.Success(map[string]any{
|
||||
"session_id": sessionID,
|
||||
"user": userinfo,
|
||||
"courses": courses,
|
||||
}))
|
||||
}
|
||||
|
||||
func (h *WKHandler) Online(ctx *gin.Context) {
|
||||
val, ok := ctx.Get("wk_instance")
|
||||
if !ok {
|
||||
ctx.JSON(http.StatusOK, dto.Error(-1, "登录已过期"))
|
||||
return
|
||||
}
|
||||
wk := val.(*ckwk.WK)
|
||||
|
||||
flag, err := wk.Online()
|
||||
if err != nil {
|
||||
ctx.JSON(200, dto.Error(-1, err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
if !flag {
|
||||
ctx.JSON(200, dto.Error(-1, "保持账号状态失败"))
|
||||
return
|
||||
}
|
||||
ctx.JSON(200, dto.Ok())
|
||||
}
|
||||
|
||||
func (h *WKHandler) Logout(ctx *gin.Context) {
|
||||
sessionID := ctx.GetString("session_id")
|
||||
h.Session.Del(sessionID)
|
||||
ctx.JSON(200, dto.Ok())
|
||||
}
|
||||
|
||||
func (h *WKHandler) Study(ctx *gin.Context) {
|
||||
val, ok := ctx.Get("wk_instance")
|
||||
if !ok {
|
||||
ctx.JSON(200, dto.Error(-1, "登录已过期"))
|
||||
return
|
||||
}
|
||||
wk := val.(*ckwk.WK)
|
||||
|
||||
var req dto.StudyReq
|
||||
if err := ctx.ShouldBindJSON(&req); err != nil {
|
||||
ctx.JSON(200, dto.Error(-1, "请求参数错误"))
|
||||
return
|
||||
}
|
||||
|
||||
result, err := wk.Study(req.NodeID, req.StudyID, req.StudyTime, req.Status)
|
||||
if err != nil {
|
||||
ctx.JSON(200, dto.Error(-1, err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
ctx.JSON(200, dto.Success(result))
|
||||
}
|
||||
|
||||
func (h *WKHandler) AllRecord(ctx *gin.Context) {
|
||||
val, ok := ctx.Get("wk_instance")
|
||||
if !ok {
|
||||
ctx.JSON(200, dto.Error(-1, "登录已过期"))
|
||||
return
|
||||
}
|
||||
wk := val.(*ckwk.WK)
|
||||
|
||||
var req dto.AllRecordReq
|
||||
if err := ctx.ShouldBindJSON(&req); err != nil {
|
||||
ctx.JSON(200, dto.Error(-1, "请求参数错误"))
|
||||
return
|
||||
}
|
||||
if req.Page < 1 {
|
||||
req.Page = 1
|
||||
}
|
||||
var list any
|
||||
var pageInfo any
|
||||
var err error
|
||||
|
||||
// 根据类型调用不同的泛型方法
|
||||
switch req.RecordType {
|
||||
case ckwk.RecordStudy:
|
||||
res, e := wk.GetStudyList(req.CourseID, fmt.Sprint(req.Page))
|
||||
err = e
|
||||
if e == nil {
|
||||
list, pageInfo = res.List, res.PageInfo
|
||||
}
|
||||
case ckwk.RecordWork:
|
||||
res, e := wk.GetWorkList(req.CourseID, fmt.Sprint(req.Page))
|
||||
err = e
|
||||
if e == nil {
|
||||
list, pageInfo = res.List, res.PageInfo
|
||||
}
|
||||
case ckwk.RecordExam:
|
||||
res, e := wk.GetExamList(req.CourseID, fmt.Sprint(req.Page))
|
||||
err = e
|
||||
if e == nil {
|
||||
list, pageInfo = res.List, res.PageInfo
|
||||
}
|
||||
case ckwk.RecordDiscuss:
|
||||
res, e := wk.GetDiscussList(req.CourseID, fmt.Sprint(req.Page))
|
||||
err = e
|
||||
if e == nil {
|
||||
list, pageInfo = res.List, res.PageInfo
|
||||
}
|
||||
default:
|
||||
ctx.JSON(200, dto.Error(-1, "不支持的记录类型"))
|
||||
return
|
||||
}
|
||||
if err != nil {
|
||||
ctx.JSON(200, dto.Error(-1, err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
ctx.JSON(200, dto.Success(map[string]any{
|
||||
"list": list,
|
||||
"page_info": pageInfo,
|
||||
}))
|
||||
}
|
||||
Reference in New Issue
Block a user