backsource.go 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. package cms
  2. import (
  3. "context"
  4. "database/sql"
  5. "fmt"
  6. "go-common/app/interface/main/tv/model"
  7. xsql "go-common/library/database/sql"
  8. "go-common/library/log"
  9. "go-common/library/xstr"
  10. )
  11. const (
  12. _seasonCols = "SELECT id, cover, title , upinfo, `desc`, category, area, play_time, role, staff, total_num, style,origin_name,alias,status FROM tv_ep_season "
  13. _epCols = "SELECT epid, cover, title, subtitle, pay_status FROM tv_content "
  14. _seasonMetas = _seasonCols + " WHERE id IN (%s)"
  15. _arcMetas = "SELECT title, aid, content, cover, typeid, pubtime, videos, valid, deleted, result FROM ugc_archive WHERE aid IN (%s)"
  16. _videoMeta = "SELECT cid, eptitle, aid, index_order, valid, deleted, result FROM ugc_video WHERE cid = ?"
  17. _videoMetas = "SELECT cid, eptitle, aid, index_order, valid, deleted, result FROM ugc_video WHERE cid IN (%s)"
  18. _epMetas = _epCols + " WHERE epid IN (%s) AND is_deleted = 0 "
  19. _simpleEPC = "SELECT `id`, `epid`, `state`, `is_deleted`, `valid`, `season_id` , `mark` FROM `tv_content` WHERE `epid` = ? LIMIT 1"
  20. _simpleEPCs = "SELECT `id`, `epid`, `state`, `is_deleted`, `valid`, `season_id` , `mark` FROM `tv_content` WHERE `epid` IN (%s)"
  21. _simpleSea = "SELECT `id`, `is_deleted`, `check`, `valid` FROM `tv_ep_season` WHERE `id` = ? LIMIT 1"
  22. _simpleSeas = "SELECT `id`, `is_deleted`, `check`, `valid` FROM `tv_ep_season` WHERE `id` IN (%s)"
  23. _seasonCMS = _seasonCols + "WHERE id = ? AND is_deleted = 0"
  24. _epCMS = _epCols + " WHERE epid = ? AND is_deleted = 0 "
  25. _newestOrder = "SELECT a.epid,b.`order` FROM tv_content a LEFT JOIN tv_ep_content b ON a.epid=b.id " +
  26. "WHERE a.season_id=? AND a.state= ? AND a.valid= ? AND a.is_deleted=0 ORDER by `order` DESC LIMIT 1"
  27. epStatePass = 3
  28. _CMSValid = 1
  29. )
  30. // VideoMetaDB picks video from DB
  31. func (d *Dao) VideoMetaDB(c context.Context, cid int64) (meta *model.VideoCMS, err error) {
  32. rows, err := d.db.Query(c, _videoMeta, cid)
  33. if err != nil {
  34. log.Error("VideoMetaDB d.db.Query error(%v)", err)
  35. return
  36. }
  37. defer rows.Close()
  38. for rows.Next() {
  39. li := &model.VideoCMS{}
  40. if err = rows.Scan(&li.CID, &li.Title, &li.AID, &li.IndexOrder, &li.Valid, &li.Deleted, &li.Result); err != nil {
  41. log.Error("VideoMetaDB row.Scan error(%v)", err)
  42. return
  43. }
  44. meta = li
  45. }
  46. return
  47. }
  48. // ArcMetaDB picks arc from DB
  49. func (d *Dao) ArcMetaDB(c context.Context, aid int64) (meta *model.ArcCMS, err error) {
  50. rows, err := d.db.Query(c, fmt.Sprintf(_arcMetas, fmt.Sprintf("%d", aid)))
  51. if err != nil {
  52. log.Error("ArcMetas d.db.Query error(%v)", err)
  53. return
  54. }
  55. defer rows.Close()
  56. for rows.Next() {
  57. li := &model.ArcCMS{}
  58. if err = rows.Scan(&li.Title, &li.AID, &li.Content, &li.Cover, &li.TypeID, &li.Pubtime, &li.Videos, &li.Valid, &li.Deleted, &li.Result); err != nil {
  59. log.Error("ArcMetas row.Scan error(%v)", err)
  60. return
  61. }
  62. meta = li
  63. }
  64. return
  65. }
  66. // VideoMetas picks video from DB
  67. func (d *Dao) VideoMetas(c context.Context, cids []int64) (meta map[int64]*model.VideoCMS, err error) {
  68. meta = make(map[int64]*model.VideoCMS)
  69. rows, err := d.db.Query(c, fmt.Sprintf(_videoMetas, xstr.JoinInts(cids)))
  70. if err != nil {
  71. log.Error("VideoMetaDB d.db.Query error(%v)", err)
  72. return
  73. }
  74. defer rows.Close()
  75. for rows.Next() {
  76. li := &model.VideoCMS{}
  77. if err = rows.Scan(&li.CID, &li.Title, &li.AID, &li.IndexOrder, &li.Valid, &li.Deleted, &li.Result); err != nil {
  78. log.Error("VideoMetaDB row.Scan error(%v)", err)
  79. return
  80. }
  81. meta[int64(li.CID)] = li
  82. }
  83. return
  84. }
  85. // ArcMetas picks seasons from DB
  86. func (d *Dao) ArcMetas(c context.Context, aids []int64) (metas map[int64]*model.ArcCMS, err error) {
  87. metas = make(map[int64]*model.ArcCMS)
  88. rows, err := d.db.Query(c, fmt.Sprintf(_arcMetas, xstr.JoinInts(aids)))
  89. if err != nil {
  90. log.Error("ArcMetas d.db.Query error(%v)", err)
  91. return
  92. }
  93. defer rows.Close()
  94. for rows.Next() {
  95. li := &model.ArcCMS{}
  96. if err = rows.Scan(&li.Title, &li.AID, &li.Content, &li.Cover, &li.TypeID, &li.Pubtime, &li.Videos, &li.Valid, &li.Deleted, &li.Result); err != nil {
  97. log.Error("ArcMetas row.Scan error(%v)", err)
  98. return
  99. }
  100. metas[li.AID] = li
  101. }
  102. return
  103. }
  104. // SeasonMetas picks seasons from DB
  105. func (d *Dao) SeasonMetas(c context.Context, sids []int64) (metas map[int64]*model.SeasonCMS, err error) {
  106. metas = make(map[int64]*model.SeasonCMS)
  107. rows, err := d.db.Query(c, fmt.Sprintf(_seasonMetas, xstr.JoinInts(sids)))
  108. if err != nil {
  109. log.Error("SeasonMetas d.db.Query error(%v)", err)
  110. return
  111. }
  112. defer rows.Close()
  113. for rows.Next() {
  114. li := &model.SeasonCMS{}
  115. // SELECT id, cover, title , upinfo, `desc`, category, area, play_time, role, staff, total_num, style, origin_name, status
  116. if err = rows.Scan(&li.SeasonID, &li.Cover, &li.Title, &li.UpInfo, &li.Desc, &li.Category, &li.Area,
  117. &li.Playtime, &li.Role, &li.Staff, &li.TotalNum, &li.Style, &li.OriginName, &li.Alias, &li.PayStatus); err != nil {
  118. log.Error("SeasonMetas row.Scan error(%v)", err)
  119. return
  120. }
  121. metas[int64(li.SeasonID)] = li
  122. }
  123. for _, v := range metas {
  124. v.NewestEPID, v.NewestOrder, _ = d.NewestOrder(c, v.SeasonID)
  125. }
  126. return
  127. }
  128. // NewestOrder picks one season's newest passed ep's order column value
  129. func (d *Dao) NewestOrder(c context.Context, sid int64) (epid int64, newestOrder int, err error) {
  130. if err = d.db.QueryRow(c, _newestOrder, sid, epStatePass, _CMSValid).Scan(&epid, &newestOrder); err != nil { // get the qualified aid to sync
  131. log.Warn("d.NewestOrder(sid %d).Query error(%v)", sid, err)
  132. }
  133. return
  134. }
  135. // EpMetas picks ep info from DB
  136. func (d *Dao) EpMetas(c context.Context, epids []int64) (metas map[int64]*model.EpCMS, err error) {
  137. metas = make(map[int64]*model.EpCMS)
  138. rows, err := d.db.Query(c, fmt.Sprintf(_epMetas, xstr.JoinInts(epids)))
  139. if err != nil {
  140. log.Error("EpMetas d.db.Query error(%v)", err)
  141. return
  142. }
  143. defer rows.Close()
  144. for rows.Next() {
  145. li := &model.EpCMS{}
  146. if err = rows.Scan(&li.EPID, &li.Cover, &li.Title, &li.Subtitle, &li.PayStatus); err != nil {
  147. log.Error("EpMetas row.Scan error(%v)", err)
  148. return
  149. }
  150. metas[li.EPID] = li
  151. }
  152. return
  153. }
  154. // EpAuthDB pick ep data from DB for Cache missing case
  155. func (d *Dao) EpAuthDB(c context.Context, cid int64) (ep *model.EpAuth, err error) {
  156. var row *xsql.Row
  157. if row = d.db.QueryRow(c, _simpleEPC, cid); err != nil {
  158. log.Error("d.db.QueryRow(%d) error(%v)", cid, err)
  159. return
  160. }
  161. ep = &model.EpAuth{}
  162. if err = row.Scan(&ep.ID, &ep.EPID, &ep.State, &ep.IsDeleted, &ep.Valid, &ep.SeasonID, &ep.NoMark); err != nil {
  163. if err == sql.ErrNoRows {
  164. err = nil
  165. ep = nil
  166. } else {
  167. log.Error("row.Scan() error(%v)", err)
  168. }
  169. }
  170. return
  171. }
  172. // SnAuthDB .
  173. func (d *Dao) SnAuthDB(c context.Context, cid int64) (s *model.SnAuth, err error) {
  174. var row *xsql.Row
  175. if row = d.db.QueryRow(c, _simpleSea, cid); err != nil {
  176. log.Error("d.db.QueryRow(%d) error(%v)", cid, err)
  177. return
  178. }
  179. s = &model.SnAuth{}
  180. if err = row.Scan(&s.ID, &s.IsDeleted, &s.Check, &s.Valid); err != nil {
  181. if err == sql.ErrNoRows {
  182. err = nil
  183. s = nil
  184. } else {
  185. log.Error("row.Scan() error(%v)", err)
  186. }
  187. }
  188. return
  189. }
  190. // SnsAuthDB .
  191. func (d *Dao) SnsAuthDB(c context.Context, sids []int64) (snsAuth map[int64]*model.SnAuth, err error) {
  192. snsAuth = make(map[int64]*model.SnAuth)
  193. rows, err := d.db.Query(c, fmt.Sprintf(_simpleSeas, xstr.JoinInts(sids)))
  194. if err != nil {
  195. log.Error("ArcMetas d.db.Query error(%v)", err)
  196. return
  197. }
  198. defer rows.Close()
  199. for rows.Next() {
  200. s := &model.SnAuth{}
  201. if err = rows.Scan(&s.ID, &s.IsDeleted, &s.Check, &s.Valid); err != nil {
  202. log.Error("SnsAuthDB row.Scan error(%v)", err)
  203. return
  204. }
  205. snsAuth[s.ID] = s
  206. }
  207. return
  208. }
  209. // EpsAuthDB def.
  210. func (d *Dao) EpsAuthDB(c context.Context, epids []int64) (epsAuth map[int64]*model.EpAuth, err error) {
  211. epsAuth = make(map[int64]*model.EpAuth)
  212. rows, err := d.db.Query(c, fmt.Sprintf(_simpleEPCs, xstr.JoinInts(epids)))
  213. if err != nil {
  214. log.Error("ArcMetas d.db.Query error(%v)", err)
  215. return
  216. }
  217. defer rows.Close()
  218. for rows.Next() {
  219. ep := &model.EpAuth{}
  220. if err = rows.Scan(&ep.ID, &ep.EPID, &ep.State, &ep.IsDeleted, &ep.Valid, &ep.SeasonID, &ep.NoMark); err != nil {
  221. log.Error("SnsAuthDB row.Scan error(%v)", err)
  222. return
  223. }
  224. epsAuth[ep.EPID] = ep
  225. }
  226. return
  227. }
  228. // SeasonCMS gets the fields that can be changed from tv-cms side to offer the TV APP
  229. func (d *Dao) SeasonCMS(c context.Context, sid int64) (season *model.SeasonCMS, err error) {
  230. var row *xsql.Row
  231. if row = d.db.QueryRow(c, _seasonCMS, sid); err != nil {
  232. log.Error("d.db.QueryRow(%d) error(%v)", sid, err)
  233. return
  234. }
  235. season = &model.SeasonCMS{}
  236. // select id, cover, `desc`, title , upinfo, category, area, play_time, role, staff, total_num, style, status
  237. if err = row.Scan(&season.SeasonID, &season.Cover, &season.Desc, &season.Title, &season.UpInfo,
  238. &season.Category, &season.Area, &season.Playtime, &season.Role, &season.Staff, &season.TotalNum,
  239. &season.Style, &season.OriginName, &season.Alias, &season.PayStatus); err != nil {
  240. if err == sql.ErrNoRows {
  241. err = nil
  242. season = nil
  243. } else {
  244. log.Error("row.Scan(sid %d) error(%v)", sid, err)
  245. }
  246. return
  247. }
  248. // add newest info
  249. season.NewestEPID, season.NewestOrder, _ = d.NewestOrder(c, sid)
  250. return
  251. }
  252. // EpCMS gets the fields that can be changed from tv-cms side to offer the TV APP
  253. func (d *Dao) EpCMS(c context.Context, epid int64) (ep *model.EpCMS, err error) {
  254. var row *xsql.Row
  255. if row = d.db.QueryRow(c, _epCMS, epid); err != nil {
  256. log.Error("d.db.QueryRow(%d) error(%v)", epid, err)
  257. return
  258. }
  259. ep = &model.EpCMS{}
  260. // select id, cover, `desc`, title , upinfo, category, area, play_time, role, staff, total_num, style
  261. if err = row.Scan(&ep.EPID, &ep.Cover, &ep.Title, &ep.Subtitle, &ep.PayStatus); err != nil {
  262. if err == sql.ErrNoRows {
  263. err = nil
  264. ep = nil
  265. } else {
  266. log.Error("row.Scan(sid %d) error(%v)", epid, err)
  267. }
  268. return
  269. }
  270. return
  271. }