Files
36Wisdom/biz/controller/level.go
T
adminandClaude Opus 4.7 d2887bf8a3 feat: 内容接口(计策/关卡/元素,含缓存与解锁判定)
计策列表/详情、关卡详情(决策树内存组装),内容查询走缓存,
按孩子年龄段过滤关卡,解锁按前置计全部关卡完美判定。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-08-13 12:26:59 +08:00

72 lines
1.6 KiB
Go

package controller
import (
"context"
"36wisdom/biz/model/dto"
"36wisdom/biz/service"
"36wisdom/common/auth"
)
type level struct{}
var Level = &level{}
func (c *level) Detail(ctx context.Context, req *dto.LevelDetailReq) (*dto.LevelDetailRes, error) {
detail, err := service.Level.Detail(ctx, auth.GetUid(ctx), req.ChildId, req.LevelId)
if err != nil {
return nil, err
}
res := &dto.LevelDetailRes{
LevelId: detail.LevelId,
Title: detail.Title,
Scene: elementVO(detail.Scene),
SceneContent: detail.SceneContent,
SceneImage: detail.SceneImage,
SceneAudio: detail.SceneAudio,
Entry: nodeVO(detail.Entry),
TotalFinals: detail.TotalFinals,
Perfect: detail.Perfect,
Stars: detail.Stars,
}
return res, nil
}
func elementVO(e *service.Element) *dto.ElementVO {
if e == nil {
return nil
}
return &dto.ElementVO{
Id: e.Id,
EType: e.EType,
Name: e.Name,
Image: e.Image,
Audio: e.Audio,
Description: e.Description,
}
}
func nodeVO(n *service.Node) dto.NodeVO {
vo := dto.NodeVO{
NodeId: n.NodeId,
Title: n.Title,
Content: n.Content,
Image: n.Image,
Audio: n.Audio,
Character: elementVO(n.Character),
InteractionType: n.InteractionType,
Config: n.Config,
NodeType: n.NodeType,
ResultType: n.ResultType,
Options: make([]dto.OptionVO, 0, len(n.Options)),
}
for _, o := range n.Options {
vo.Options = append(vo.Options, dto.OptionVO{
OptionId: o.OptionId,
Text: o.Text,
Prop: elementVO(o.Prop),
})
}
return vo
}