package controller import "service/dbstruct" func FillMedia(obj interface{}) { switch obj.(type) { case []*dbstruct.Product: fillMediaProducts(obj.([]*dbstruct.Product)) } } // todo func getImageByIds(ids []int64) map[int64]*dbstruct.Image { return map[int64]*dbstruct.Image{ 1: {W: 11111111}, 2: {W: 22222222}, } } // todo func getVideoByIds(ids []int64) map[int64]*dbstruct.Video { return map[int64]*dbstruct.Video{ 1: {Dur: 1111111}, 2: {Dur: 2222222}, } } // todo func transToCImage(image *dbstruct.Image) *dbstruct.ToCImage { return &dbstruct.ToCImage{ Id: image.Id, W: image.W, H: image.H, Fmt: image.Fmt, Urls: []string{"todo"}, } } // todo func transToCVideo(video *dbstruct.Video) *dbstruct.ToCVideo { return &dbstruct.ToCVideo{ Id: video.Id, Dur: video.Dur, CoverUrls: []string{"todo"}, Urls: []string{"todo"}, } } func fillMediaProducts(list []*dbstruct.Product) { imageIds := make([]int64, 0) videoIds := make([]int64, 0) for _, v := range list { imageIds = append(imageIds, v.ImageIds...) videoIds = append(videoIds, v.VideoIds...) } imageMap := getImageByIds(imageIds) videoMap := getVideoByIds(videoIds) for _, v := range list { for _, imgId := range v.ImageIds { if img, ok := imageMap[imgId]; ok { v.Images = append(v.Images, transToCImage(img)) } } for _, vdoId := range v.VideoIds { if vdo, ok := videoMap[vdoId]; ok { v.Videos = append(v.Videos, transToCVideo(vdo)) } } } }