mango_db.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package thirdp
  2. import (
  3. "context"
  4. "fmt"
  5. "go-common/app/interface/main/tv/model/thirdp"
  6. "go-common/library/database/sql"
  7. "go-common/library/log"
  8. )
  9. const (
  10. _mangoPGCPage = "SELECT id,mtime FROM tv_ep_season %s ORDER BY id"
  11. _mangoUGCPage = "SELECT aid,mtime FROM ugc_archive %s ORDER BY aid"
  12. _mangoPGCOffset = "SELECT id FROM tv_ep_season %s ORDER BY id"
  13. _mangoUGCOffset = "SELECT aid FROM ugc_archive %s ORDER BY aid"
  14. _mangoPGCCount = "SELECT count(1) FROM tv_ep_season"
  15. _mangoUGCCount = "SELECT count(1) FROM ugc_archive"
  16. _mangoPGCSnCount = "SELECT count(1) FROM tv_content WHERE season_id = ?"
  17. _mangoUGCArcCount = "SELECT count(1) FROM ugc_video WHERE aid = ?"
  18. _mangoPGCSnOffset = "SELECT epid,mtime FROM tv_content WHERE season_id = ?"
  19. _mangoUGCArcOffset = "SELECT cid,mtime FROM ugc_video WHERE aid = ?"
  20. _mangoPGCKey = "TV_Mango_PGC_Page"
  21. _mangoUGCKey = "TV_Mango_UGC_Page"
  22. // MangoPGC is mango pgc typeC
  23. MangoPGC = "mango_pgc"
  24. // MangoUGC is mango ugc typeC
  25. MangoUGC = "mango_ugc"
  26. )
  27. // MangoPages picks a page for dangbei api, lastID is the last page's biggest ID
  28. func (d *Dao) MangoPages(ctx context.Context, req *thirdp.ReqDBeiPages) (sids []*thirdp.RespSid, myLast int64, err error) {
  29. var (
  30. rows *sql.Rows
  31. query string
  32. )
  33. switch req.TypeC {
  34. case MangoPGC:
  35. query = fmt.Sprintf(_mangoPGCPage+" LIMIT %d", " WHERE id> ?", req.Ps)
  36. case MangoUGC:
  37. query = fmt.Sprintf(_mangoUGCPage+" LIMIT %d", " WHERE aid> ?", req.Ps)
  38. default:
  39. err = fmt.Errorf("MangoPages Wrong Type %s", req.TypeC)
  40. return
  41. }
  42. if rows, err = d.db.Query(ctx, query, req.LastID); err != nil {
  43. log.Error("MangoPages, lastID %d, Err %v", req.LastID, err)
  44. return
  45. }
  46. defer rows.Close()
  47. if sids, myLast, err = mangoRowsTreat(rows); err != nil {
  48. log.Error("MangoPages lastID %d, Err %v", req.LastID, err)
  49. }
  50. return
  51. }
  52. func mangoRowsTreat(rows *sql.Rows) (sids []*thirdp.RespSid, myLast int64, err error) {
  53. for rows.Next() {
  54. var r = thirdp.RespSid{}
  55. if err = rows.Scan(&r.Sid, &r.Mtime); err != nil {
  56. return
  57. }
  58. sids = append(sids, &r)
  59. }
  60. if len(sids) > 0 {
  61. myLast = sids[len(sids)-1].Sid
  62. }
  63. return
  64. }
  65. // MangoSnCnt counts ep/video number from DB
  66. func (d *Dao) MangoSnCnt(ctx context.Context, isPGC bool, sid int64) (cnt int, err error) {
  67. var querySQL string
  68. if isPGC {
  69. querySQL = _mangoPGCSnCount
  70. } else {
  71. querySQL = _mangoUGCArcCount
  72. }
  73. if err = d.db.QueryRow(ctx, querySQL, sid).Scan(&cnt); err != nil {
  74. log.Error("MangoSnCnt isPGC %v, Sid %d, Err %v", isPGC, sid, err)
  75. }
  76. return
  77. }
  78. // MangoSnOffset picks season or arc's detail info by page ( limit + offset )
  79. func (d *Dao) MangoSnOffset(ctx context.Context, isPGC bool, sid int64, pageN, pagesize int) (epids []*thirdp.RespSid, err error) {
  80. var (
  81. querySQL = fmt.Sprintf(" LIMIT %d, %d", (pageN-1)*pagesize, pagesize)
  82. rows *sql.Rows
  83. )
  84. if isPGC {
  85. querySQL = _mangoPGCSnOffset + querySQL
  86. } else {
  87. querySQL = _mangoUGCArcOffset + querySQL
  88. }
  89. if rows, err = d.db.Query(ctx, querySQL, sid); err != nil {
  90. log.Error("MangoSnOffset, Sid %d, IsPGC %v, Err %v", sid, isPGC, err)
  91. return
  92. }
  93. defer rows.Close()
  94. if epids, _, err = mangoRowsTreat(rows); err != nil {
  95. log.Error("MangoSnOffset, Sid %d, IsPGC %v, Err %v", sid, isPGC, err)
  96. }
  97. return
  98. }