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, SceneContentPinyin: detail.SceneContentPinyin, 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, NamePinyin: e.NamePinyin, 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, ContentPinyin: n.ContentPinyin, 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, TextPinyin: o.TextPinyin, FeedbackPros: o.FeedbackPros, FeedbackCons: o.FeedbackCons, Prop: elementVO(o.Prop), }) } return vo }