package dto import ( "fmt" "vote-video-api/api/model" ) // VideoDto 视频表 type VideoDto struct { VideoId string `json:"video_id"` // 主键id VideoTitle string `json:"video_title"` // 视频标题 VideoStatus int `json:"video_status"` // 视频状态(1:正常 2:禁用) VideoNumber string `json:"video_number"` // 视频编号 VoteNum uint `json:"vote_num"` // 总票数 VideoNo string `json:"video_no"` // 视频编号(保利) VideoContent string `json:"video_content"` // 视频内容 CreatedAt model.LocalTime `json:"created_at"` // 创建时间 UpdatedAt model.LocalTime `json:"updated_at"` // 更新时间 VideoAuthor []*VideoAuthorDto `json:"video_author"` // 作者 Rank *int `json:"rank"` // 排名 IsVote bool `json:"is_vote"` // 是否已投票(false:否 true:是) } // GetVideoListDto 列表-分页 func GetVideoListDto(m []*model.Video) []*VideoDto { // 处理返回值 responses := make([]*VideoDto, len(m)) if len(m) > 0 { for i, v := range m { response := &VideoDto{ VideoId: fmt.Sprintf("%d", v.VideoId), VideoTitle: v.VideoTitle, VideoStatus: v.VideoStatus, VideoNumber: v.VideoNumber, VoteNum: v.VoteNum, VideoNo: v.VideoNo, CreatedAt: v.CreatedAt, UpdatedAt: v.UpdatedAt, } // 加载数据-作者 if v.VideoAuthor != nil { response = response.LoadVideoAuthor(v.VideoAuthor) } // 将转换后的结构体添加到新切片中 responses[i] = response } } return responses } // GetVideoDto 详情 func GetVideoDto(m *model.Video) *VideoDto { return &VideoDto{ VideoId: fmt.Sprintf("%d", m.VideoId), VideoTitle: m.VideoTitle, VideoStatus: m.VideoStatus, VideoNumber: m.VideoNumber, VoteNum: m.VoteNum, VideoNo: m.VideoNo, VideoContent: m.VideoContent, CreatedAt: m.CreatedAt, UpdatedAt: m.UpdatedAt, } } // LoadVideoAuthor 加载数据-作者 func (r *VideoDto) LoadVideoAuthor(m []*model.VideoAuthor) *VideoDto { if len(m) > 0 { r.VideoAuthor = GetVideoAuthorListDto(m) } return r } // LoadRank 加载数据-排名 func (r *VideoDto) LoadRank(m int) *VideoDto { if m > 0 { r.Rank = &m } return r } // LoadVoteStatus 加载数据-投票状态 func (r *VideoDto) LoadVoteStatus(m bool) *VideoDto { r.IsVote = m return r }