service/dbstruct/media.go

179 lines
5.5 KiB
Go

package dbstruct
import (
"errors"
"service/library/wishjson"
)
// 图片
const (
ImageStatusResizeInit = 0
ImageStatusResizeDone = 100
ImageStatusResizeFail = 101
)
// 视频
const (
VideoStatusResizeInit = 0
VideoStatusResizeDone = 100
VideoStatusResizeFail = 101
)
type Image struct {
Id int64 `json:"id" bson:"_id"` // 图片id
Ct int64 `json:"ct" bson:"ct"` // 创建时间
Ut int64 `json:"ut" bson:"ut"` // 更新时间
SrcId string `json:"src_id" bson:"src_id"` // 源id
SizeSrc int64 `json:"size_src" bson:"size_src"` // 原图片大小
SrcId720 string `json:"src_id_720" bson:"src_id_720"` // 720P图片
Size720 int64 `json:"size_720" bson:"size_720"` // 720P图片大小
SrcId1080 string `json:"src_id_1080" bson:"src_id_1080"` // 1080P图片
Size1080 int64 `json:"size_1080" bson:"size_1080"` // 1080P图片大小
SrcId1440 string `json:"src_id_1440" bson:"src_id_1440"` // 1440P图片
Size1440 int64 `json:"size_1440" bson:"size_1440"` // 1440P图片大小
Status int `json:"status" bson:"status"` // 状态
ResizeT int64 `json:"resize_t" bson:"resize_t"` // 压缩时间
MD5 string `json:"md5" bson:"md5"` // 视频md5
W int64 `json:"w" bson:"w"` // 宽
H int64 `json:"h" bson:"h"` // 高
Fmt string `json:"fmt" bson:"fmt"` // 图片格式
}
func (i *Image) SelectMinSizeOssId() string {
if i == nil {
return ""
}
if len(i.SrcId720) > 0 && i.Size720 < i.SizeSrc {
return i.SrcId720
}
return i.SrcId
}
type ToCImage struct {
Id int64 `json:"id"` // 图片id
W int64 `json:"w"` // 宽
H int64 `json:"h"` // 高
Fmt string `json:"fmt"` // 图片格式
Urls []string `json:"urls"` // 图片展示地址
}
// 视频
type Video struct {
Id int64 `json:"id" bson:"_id"` // 视频id
Ct int64 `json:"ct" bson:"ct"` // 创建时间
Ut int64 `json:"ut" bson:"ut"` // 更新时间
SrcId string `json:"src_id" bson:"src_id"` // 源id
SizeSrc int64 `json:"size_src" bson:"size_src"` // 原视频大小
SrcId720 string `json:"src_id_720" bson:"src_id_720"` // 720P视频
Size720 int64 `json:"size_720" bson:"size_720"` // 720P视频大小
SrcIdH264 string `json:"src_id_h264" bson:"src_id_h264"` // 原视频h264 mp4
SizeH264 int64 `json:"size_h264" bson:"size_h264"` // 原视频h264 mp4大小
Status int `json:"status" bson:"status"` // 状态
ResizeT int64 `json:"resize_t" bson:"resize_t"` // 压缩时间
CoverSrcId string `json:"cover_src_id" bson:"cover_src_id"` // cover srcId
CoverId int64 `json:"cover_id" bson:"cover_id"` // 封面id
MD5 string `json:"md5" bson:"md5"` // 视频md5
Dur int64 `json:"dur" bson:"dur"` // 视频时长
Fmt string `json:"fmt" bson:"fmt"`
}
var SrcVidMap = map[int64]bool{}
func (i *Video) SelectMinSizeOssId() string {
if SrcVidMap[i.Id] {
return i.SrcId
}
if i == nil {
return ""
}
if i.Status == VideoStatusResizeDone && len(i.SrcId720) > 0 && i.Size720 < i.SizeSrc {
return i.SrcId720
}
return i.SrcId
}
func (i *Video) MustSelectMinSizeOssId() string {
if i == nil {
return ""
}
if i.Status == VideoStatusResizeDone && len(i.SrcId720) > 0 && i.Size720 < i.SizeSrc {
return i.SrcId720
}
return i.SrcId
}
type ToCVideo struct {
Id int64 `json:"id"` // 视频id
Dur int64 `json:"dur"` // 视频时
CoverUrls []string `json:"cover_urls"` // 视频封面地址
CoverW int64 `json:"cover_w"` // 封面宽
CoverH int64 `json:"cover_h"` // 封面高
CoverFmt string `json:"cover_fmt"` // 封面图片格式
Urls []string `json:"urls"` // 视频地址
}
func NewImageFromJson(item any) (img *Image, err error) {
j := wishjson.New(item)
img = &Image{
SrcId: j.Get("src_id").MustPhpString(),
MD5: j.Get("md5").MustPhpString(),
W: j.Get("w").MustPhpInt(),
H: j.Get("h").MustPhpInt(),
Fmt: j.Get("fmt").MustPhpString(),
}
if img.SrcId == "" {
err = errors.New("invalid image object with null src_id")
return
}
if img.MD5 == "" {
err = errors.New("invalid image object with null md5")
return
}
if img.W == 0 {
err = errors.New("invalid image object with zero-width")
return
}
if img.H == 0 {
err = errors.New("invalid image object with zero-height")
return
}
if img.Fmt == "" {
err = errors.New("invalid image object with null fmt")
return
}
return
}
func NewVideoFromJson(item any) (vid *Video, err error) {
j := wishjson.New(item)
vid = &Video{
SrcId: j.Get("src_id").MustPhpString(),
CoverSrcId: j.Get("cover_src_id").MustPhpString(),
CoverId: j.Get("cover_id").MustPhpInt(),
MD5: j.Get("md5").MustPhpString(),
Dur: j.Get("dur").MustPhpInt(),
Fmt: j.Get("fmt").MustPhpString(),
}
if vid.SrcId == "" {
err = errors.New("invalid video object with null src_id")
return
}
if vid.CoverId == 0 {
err = errors.New("invalid video object with zero cover_id")
return
}
if vid.MD5 == "" {
err = errors.New("invalid video object with null md5")
return
}
//if vid.Dur == 0 {
// err = errors.New("invalid video object with zero dur")
// return
//}
if vid.Fmt == "" {
err = errors.New("invalid video object with null fmt")
return
}
return
}