media.go 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. package media
  2. import (
  3. "errors"
  4. logger "eta/eta_mini_ht_api/common/component/log"
  5. "eta/eta_mini_ht_api/models"
  6. "eta/eta_mini_ht_api/models/report"
  7. "gorm.io/gorm"
  8. "time"
  9. )
  10. const (
  11. CommonColumns = "id,media_type,src,media_name,source_type,media_play_milliseconds,permission_ids,published_time,cover_src"
  12. DetailColumns = "id,media_type,src,media_name,source_type,media_play_milliseconds,permission_ids,published_time,author_id,author_name,cover_src"
  13. )
  14. type MediaType string
  15. const (
  16. Video MediaType = "video"
  17. Audio MediaType = "audio"
  18. )
  19. type Media struct {
  20. Id int `gorm:"primary_key;auto_increment;column:id"`
  21. AuthorID int `gorm:"column:author_id"`
  22. AuthorName string `gorm:"column:author_name"`
  23. MediaType MediaType `gorm:"column:media_type"`
  24. Src string `gorm:"column:src"`
  25. MediaName string `gorm:"column:media_name"`
  26. SourceType string `gorm:"column:source_type"`
  27. CoverSrc string `gorm:"column:cover_src"`
  28. MediaPlayMilliseconds int `gorm:"column:media_play_milliseconds"`
  29. PermissionIDs string `gorm:"column:permission_ids"`
  30. PublishedTime time.Time `gorm:"column:published_time"`
  31. SendStatus report.SendStatus `gorm:"column:send_status"`
  32. Deleted int `gorm:"column:deleted"`
  33. CreatedTime time.Time `gorm:"column:created_time"`
  34. UpdatedTime time.Time `gorm:"column:updated_time"`
  35. }
  36. func (m *Media) BeforeCreate(_ *gorm.DB) (err error) {
  37. m.PublishedTime = time.Now()
  38. m.CreatedTime = time.Now()
  39. return
  40. }
  41. func GetCountByMediaType(mediaType string) (count int64, latestId int64) {
  42. db := models.Main()
  43. var ids []int
  44. err := db.Model(&Media{}).Select("id").Where("media_type = ? and deleted = ?", mediaType, false).Order("id desc").Scan(&ids).Error
  45. if err != nil {
  46. return 0, 0
  47. }
  48. count = int64(len(ids))
  49. latestId = int64(ids[0])
  50. return
  51. }
  52. func GetCountByMediaTypeByAnalystId(mediaType string, analystId int) (count int64, latestId int64) {
  53. db := models.Main()
  54. var ids []int
  55. err := db.Model(&Media{}).Select("id").Where("media_type = ? and deleted = ? and author_id = ?", mediaType, false, analystId).Order("id desc").Scan(&ids).Error
  56. if err != nil {
  57. return 0, 0
  58. }
  59. count = int64(len(ids))
  60. latestId = int64(ids[0])
  61. return
  62. }
  63. func GetMediaPage(latestId int64, limit int, offset int, mediaType string) (mediaList []Media, err error) {
  64. if latestId < 0 {
  65. err = errors.New("非法的id参数")
  66. logger.Error("非法的id参数:%d", latestId)
  67. return
  68. }
  69. if limit <= 0 {
  70. err = errors.New("非法的limit参数")
  71. logger.Error("非法的limit参数:%d", limit)
  72. }
  73. db := models.Main()
  74. err = db.Select(CommonColumns).Where("media_type= ? and id<= ?", mediaType, latestId).Order("created_time desc").Limit(limit).Offset(offset).Find(&mediaList).Error
  75. return
  76. }
  77. func GetMediaPageByIds(latestId int64, limit int, offset int, mediaType string, mediasIds []int) (mediaList []Media, err error) {
  78. if len(mediasIds) == 0 {
  79. return GetMediaPage(latestId, limit, offset, mediaType)
  80. }
  81. if latestId < 0 {
  82. err = errors.New("非法的id参数")
  83. logger.Error("非法的id参数:%d", latestId)
  84. return
  85. }
  86. if limit <= 0 {
  87. err = errors.New("非法的limit参数")
  88. logger.Error("非法的limit参数:%d", limit)
  89. }
  90. db := models.Main()
  91. err = db.Select(CommonColumns).Where(" id<= ? and media_type= ? and id in ?", latestId, mediaType, mediasIds).Order("created_time desc").Limit(limit).Offset(offset).Find(&mediaList).Error
  92. return
  93. }
  94. func GetMediaPageByAnalystId(latestId int64, limit int, offset int, mediaType string, analystId int) (mediaList []Media, err error) {
  95. if latestId < 0 {
  96. err = errors.New("非法的id参数")
  97. logger.Error("非法的id参数:%d", latestId)
  98. return
  99. }
  100. if limit <= 0 {
  101. err = errors.New("非法的limit参数")
  102. logger.Error("非法的limit参数:%d", limit)
  103. }
  104. db := models.Main()
  105. err = db.Select(CommonColumns).Where(" id<= ? and media_type= ? and author_id = ?", latestId, mediaType, analystId).Order("published_time desc").Limit(limit).Offset(offset).Find(&mediaList).Error
  106. return
  107. }
  108. func GetMediaById(mediaType string, mediaId int) (media Media, err error) {
  109. db := models.Main()
  110. err = db.Select(DetailColumns).Where("id =? and media_type=?", mediaId, mediaType).First(&media).Error
  111. return
  112. }
  113. // 测试造数据
  114. func GetlIST() (media []Media) {
  115. db := models.Main()
  116. _ = db.Model(&Media{}).Where("deleted = ?", false).Find(&media).Error
  117. return
  118. }