dao.go 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. package feedback
  2. import (
  3. "context"
  4. "net/url"
  5. "strconv"
  6. "go-common/app/interface/main/creative/conf"
  7. "go-common/app/interface/main/creative/model/feedback"
  8. "go-common/library/ecode"
  9. "go-common/library/log"
  10. httpx "go-common/library/net/http/blademaster"
  11. )
  12. const (
  13. _addURL = "/x/internal/feedback/ugc/add"
  14. _listURL = "/x/internal/feedback/ugc/session"
  15. _detailURL = "/x/internal/feedback/ugc/reply"
  16. _tagsURL = "/x/internal/feedback/ugc/tag"
  17. _closeURL = "/x/internal/feedback/ugc/session/close"
  18. )
  19. // Dao define
  20. type Dao struct {
  21. c *conf.Config
  22. // http
  23. client *httpx.Client
  24. // uri
  25. addURI string
  26. listURI string
  27. detailURI string
  28. tagsURI string
  29. closeURI string
  30. }
  31. // New init dao
  32. func New(c *conf.Config) (d *Dao) {
  33. d = &Dao{
  34. c: c,
  35. client: httpx.NewClient(c.HTTPClient.Slow),
  36. addURI: c.Host.API + _addURL,
  37. listURI: c.Host.API + _listURL,
  38. detailURI: c.Host.API + _detailURL,
  39. tagsURI: c.Host.API + _tagsURL,
  40. closeURI: c.Host.API + _closeURL,
  41. }
  42. return
  43. }
  44. // AddFeedback add feedback
  45. func (d *Dao) AddFeedback(c context.Context, mid, tagID, sessionID int64, qq, content, aid, browser, imgURL, platform, ip string) (err error) {
  46. params := url.Values{}
  47. params.Set("mid", strconv.FormatInt(mid, 10))
  48. params.Set("session_id", strconv.FormatInt(sessionID, 10))
  49. params.Set("content", content)
  50. params.Set("browser", browser)
  51. params.Set("img_url", imgURL)
  52. params.Set("qq", qq)
  53. params.Set("tag_id", strconv.FormatInt(tagID, 10))
  54. params.Set("aid", aid)
  55. params.Set("platform", platform)
  56. var res struct {
  57. Code int `json:"code"`
  58. }
  59. if err = d.client.Post(c, d.addURI, ip, params, &res); err != nil {
  60. log.Error("AddFeedback url(%s) response(%+v) error(%v)", d.addURI+"?"+params.Encode(), res, err)
  61. err = ecode.CreativeFeedbackErr
  62. return
  63. }
  64. if res.Code != 0 {
  65. log.Error("AddFeedback url(%s) res(%v)", d.addURI+"?"+params.Encode(), res)
  66. err = ecode.CreativeFeedbackErr
  67. return
  68. }
  69. return
  70. }
  71. // Tags get feedback tags/types
  72. func (d *Dao) Tags(c context.Context, mid int64, ip string) (tls *feedback.TagList, err error) {
  73. params := url.Values{}
  74. params.Set("type", "0")
  75. params.Set("platform", "ugc,article")
  76. params.Set("mid", strconv.FormatInt(mid, 10))
  77. var res struct {
  78. Code int `json:"code"`
  79. Data struct {
  80. Tags map[string][]*feedback.Tag `json:"tags"`
  81. Limit int `json:"limit"`
  82. } `json:"data"`
  83. }
  84. if err = d.client.Get(c, d.tagsURI, ip, params, &res); err != nil {
  85. log.Error("Feedback Tags url(%s) response(%+v) error(%v)", d.tagsURI+"?"+params.Encode(), res, err)
  86. err = ecode.CreativeFeedbackErr
  87. return
  88. }
  89. if res.Code != 0 {
  90. log.Error("Feedback Tags url(%s) res(%v)", d.tagsURI+"?"+params.Encode(), res)
  91. err = ecode.CreativeFeedbackErr
  92. return
  93. }
  94. tls = &feedback.TagList{}
  95. if res.Data.Tags == nil {
  96. return
  97. }
  98. platforms := []string{
  99. "article",
  100. "ugc",
  101. }
  102. pls := make([]*feedback.Platform, 0, len(platforms))
  103. for _, key := range platforms {
  104. if list, ok := res.Data.Tags[key]; ok {
  105. pl := &feedback.Platform{}
  106. tgs := make([]*feedback.Tag, 0, len(res.Data.Tags[key]))
  107. for _, v := range list {
  108. tg := &feedback.Tag{}
  109. tg.ID = v.ID
  110. tg.Name = v.Name
  111. tgs = append(tgs, tg)
  112. }
  113. pl.Tags = tgs
  114. if key == "ugc" {
  115. pl.ZH = "视频稿件"
  116. }
  117. if key == "article" {
  118. pl.ZH = "专栏稿件"
  119. }
  120. pl.EN = key
  121. pls = append(pls, pl)
  122. }
  123. }
  124. tls.Platforms = pls
  125. tls.Limit = res.Data.Limit
  126. return
  127. }
  128. // Detail get feedback details
  129. func (d *Dao) Detail(c context.Context, mid, sessionID int64, ip string) (data []*feedback.Reply, err error) {
  130. params := url.Values{}
  131. params.Set("mid", strconv.FormatInt(mid, 10))
  132. params.Set("session_id", strconv.FormatInt(sessionID, 10))
  133. var res struct {
  134. Code int `json:"code"`
  135. Data []*feedback.Reply `json:"data"`
  136. }
  137. if err = d.client.Get(c, d.detailURI, ip, params, &res); err != nil {
  138. log.Error("Feedback Detail url(%s) response(%+v) error(%v)", d.detailURI+"?"+params.Encode(), res, err)
  139. err = ecode.CreativeFeedbackErr
  140. return
  141. }
  142. if res.Code != 0 {
  143. log.Error("Feedback Detail url(%s) res(%v)", d.detailURI+"?"+params.Encode(), res)
  144. err = ecode.CreativeFeedbackErr
  145. return
  146. }
  147. data = res.Data
  148. return
  149. }
  150. // Feedbacks get feedback list
  151. func (d *Dao) Feedbacks(c context.Context, mid, ps, pn, tagID int64, state, start, end, platform, ip string) (data []*feedback.Feedback, count int64, err error) {
  152. params := url.Values{}
  153. params.Set("mid", strconv.FormatInt(mid, 10))
  154. params.Set("ps", strconv.FormatInt(ps, 10))
  155. params.Set("pn", strconv.FormatInt(pn, 10))
  156. params.Set("platform", platform)
  157. if start != "" {
  158. params.Set("start", start)
  159. params.Set("end", end)
  160. }
  161. if state != "" {
  162. params.Set("state", state)
  163. }
  164. if tagID != 0 {
  165. params.Set("tag_id", strconv.FormatInt(tagID, 10))
  166. }
  167. var res struct {
  168. Code int `json:"code"`
  169. Data []*feedback.Feedback `json:"data"`
  170. Count int64 `json:"total"`
  171. }
  172. if err = d.client.Get(c, d.listURI, ip, params, &res); err != nil {
  173. log.Error("Feedbacks url(%s) response(%+v) error(%v)", d.listURI+"?"+params.Encode(), res, err)
  174. err = ecode.CreativeFeedbackErr
  175. return
  176. }
  177. if res.Code != 0 {
  178. log.Error("Feedbacks url(%s) res(%v)", d.listURI+"?"+params.Encode(), res)
  179. err = ecode.CreativeFeedbackErr
  180. return
  181. }
  182. data = res.Data
  183. count = res.Count
  184. return
  185. }
  186. // CloseSession close feedback by user
  187. func (d *Dao) CloseSession(c context.Context, sessionID int64, ip string) (err error) {
  188. params := url.Values{}
  189. params.Set("session_id", strconv.FormatInt(sessionID, 10))
  190. var res struct {
  191. Code int `json:"code"`
  192. }
  193. if err = d.client.Post(c, d.closeURI, ip, params, &res); err != nil {
  194. log.Error("Feedback CloseSession url(%s) response(%+v) error(%v)", d.closeURI+"?"+params.Encode(), res, err)
  195. err = ecode.CreativeFeedbackErr
  196. return
  197. }
  198. if res.Code != 0 {
  199. log.Error("Feedback CloseSession url(%s) res(%v)", d.closeURI+"?"+params.Encode(), res)
  200. err = ecode.CreativeFeedbackErr
  201. return
  202. }
  203. return
  204. }