dao.go 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. package medal
  2. import (
  3. "context"
  4. "net/http"
  5. "net/url"
  6. "strconv"
  7. "strings"
  8. "go-common/app/interface/main/creative/conf"
  9. "go-common/app/interface/main/creative/model/medal"
  10. "go-common/library/ecode"
  11. "go-common/library/log"
  12. httpx "go-common/library/net/http/blademaster"
  13. )
  14. const (
  15. _checkStatus = "/fans_medal/v1/medal/if_can_open"
  16. _openMedal = "/fans_medal/v1/medal/open"
  17. _getMedal = "/fans_medal/v1/medal/get"
  18. _recentFans = "/fans_medal/v1/fans_medal/get_recent_fans_list"
  19. _checkMedal = "/fans_medal/v1/medal/check_open"
  20. _fansRank = "/fans_medal/v1/medal/top_medal_fans_list"
  21. _rename = "/fans_medal/v1/medal/rename"
  22. )
  23. // Dao define
  24. type Dao struct {
  25. c *conf.Config
  26. // http
  27. client *httpx.Client
  28. // uri
  29. checkStatusURI string
  30. openMedalURI string
  31. getMedalURI string
  32. recentFansURI string
  33. checkMedalURI string
  34. fansRankURI string
  35. renameURI string
  36. }
  37. // New init dao
  38. func New(c *conf.Config) (d *Dao) {
  39. d = &Dao{
  40. c: c,
  41. client: httpx.NewClient(c.HTTPClient.Slow),
  42. checkStatusURI: c.Host.Live + _checkStatus,
  43. openMedalURI: c.Host.Live + _openMedal,
  44. getMedalURI: c.Host.Live + _getMedal,
  45. recentFansURI: c.Host.Live + _recentFans,
  46. checkMedalURI: c.Host.Live + _checkMedal,
  47. fansRankURI: c.Host.Live + _fansRank,
  48. renameURI: c.Host.Live + _rename,
  49. }
  50. return
  51. }
  52. // Status check if up can open medal
  53. func (d *Dao) Status(c context.Context, mid int64) (st *medal.Status, err error) {
  54. var (
  55. req *http.Request
  56. params = url.Values{}
  57. )
  58. params.Set("uid", strconv.FormatInt(mid, 10))
  59. params.Set("source", "2")
  60. if req, err = http.NewRequest("GET", d.checkStatusURI+"?"+params.Encode(), nil); err != nil {
  61. log.Error("Status url(%s) error(%v)", d.checkStatusURI+"?"+params.Encode(), err)
  62. err = ecode.CreativeFansMedalErr
  63. return
  64. }
  65. req.Header.Set("X-BiliLive-UID", strconv.FormatInt(mid, 10))
  66. var res struct {
  67. Code int `json:"code"`
  68. Data *medal.Status `json:"data"`
  69. }
  70. if err = d.client.Do(c, req, &res); err != nil {
  71. log.Error("d.Status url(%s) res(%+v) err(%v)", d.checkStatusURI+"?"+params.Encode(), res, err)
  72. err = ecode.CreativeFansMedalErr
  73. return
  74. }
  75. if res.Code != 0 {
  76. log.Error("Status url(%s) res(%v)", d.checkStatusURI+"?"+params.Encode(), res)
  77. err = ecode.Int(res.Code)
  78. return
  79. }
  80. st = res.Data
  81. return
  82. }
  83. // OpenMedal open medal for up
  84. func (d *Dao) OpenMedal(c context.Context, mid int64, name string) (err error) {
  85. var (
  86. req *http.Request
  87. params = url.Values{}
  88. )
  89. params.Set("uid", strconv.FormatInt(mid, 10))
  90. params.Set("medal_name", name)
  91. params.Set("source", "2")
  92. if req, err = http.NewRequest("POST", d.openMedalURI, strings.NewReader(params.Encode())); err != nil {
  93. log.Error("OpenMedal url(%s) error(%v)", d.openMedalURI+"?"+params.Encode(), err)
  94. err = ecode.CreativeFansMedalErr
  95. return
  96. }
  97. req.Header.Set("X-BiliLive-UID", strconv.FormatInt(mid, 10))
  98. req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
  99. var res struct {
  100. Code int `json:"code"`
  101. Msg string `json:"msg"`
  102. }
  103. if err = d.client.Do(c, req, &res); err != nil {
  104. log.Error("d.OpenMedal url(%s) res(%+v) err(%v)", d.openMedalURI+"?"+params.Encode(), res, err)
  105. err = ecode.CreativeFansMedalErr
  106. return
  107. }
  108. if res.Code != 0 {
  109. log.Error("OpenMedal url(%s) res(%v)", d.openMedalURI+"?"+params.Encode(), res)
  110. err = ecode.Int(res.Code)
  111. return
  112. }
  113. return
  114. }
  115. // CheckMedal check medal name for up
  116. func (d *Dao) CheckMedal(c context.Context, mid int64, name string) (valid int, err error) {
  117. var (
  118. req *http.Request
  119. params = url.Values{}
  120. )
  121. params.Set("uid", strconv.FormatInt(mid, 10))
  122. params.Set("medal_name", name)
  123. params.Set("source", "2")
  124. if req, err = http.NewRequest("POST", d.checkMedalURI, strings.NewReader(params.Encode())); err != nil {
  125. log.Error("checkMedalURI url(%s) error(%v)", d.checkMedalURI+"?"+params.Encode(), err)
  126. err = ecode.CreativeFansMedalErr
  127. return
  128. }
  129. req.Header.Set("X-BiliLive-UID", strconv.FormatInt(mid, 10))
  130. req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
  131. var res struct {
  132. Code int `json:"code"`
  133. Data struct {
  134. Enable bool `json:"enable"`
  135. } `json:"data"`
  136. }
  137. if err = d.client.Do(c, req, &res); err != nil {
  138. log.Error("d.checkMedalURI url(%s) res(%+v) err(%v)", d.checkMedalURI+"?"+params.Encode(), res, err)
  139. err = ecode.CreativeFansMedalErr
  140. return
  141. }
  142. if res.Code != 0 {
  143. log.Error("checkMedalURI url(%s) res(%v)", d.checkMedalURI+"?"+params.Encode(), res)
  144. err = ecode.Int(res.Code)
  145. return
  146. }
  147. if !res.Data.Enable {
  148. valid = 1
  149. }
  150. return
  151. }
  152. //Medal get medal
  153. func (d *Dao) Medal(c context.Context, mid int64) (mdl *medal.Medal, err error) {
  154. var (
  155. req *http.Request
  156. params = url.Values{}
  157. )
  158. params.Set("uid", strconv.FormatInt(mid, 10))
  159. params.Set("source", "2")
  160. if req, err = http.NewRequest("GET", d.getMedalURI+"?"+params.Encode(), nil); err != nil {
  161. log.Error("Medal url(%s) error(%v)", d.getMedalURI+"?"+params.Encode(), err)
  162. err = ecode.CreativeFansMedalErr
  163. return
  164. }
  165. req.Header.Set("X-BiliLive-UID", strconv.FormatInt(mid, 10))
  166. var res struct {
  167. Code int `json:"code"`
  168. Data *medal.Medal `json:"data"`
  169. }
  170. if err = d.client.Do(c, req, &res); err != nil {
  171. log.Error("Medal url(%s) response(%+v) error(%v)", d.getMedalURI+"?"+params.Encode(), res, err)
  172. err = ecode.CreativeFansMedalErr
  173. return
  174. }
  175. if res.Code != 0 {
  176. log.Error("Medal url(%s) res(%v)", d.getMedalURI+"?"+params.Encode(), res)
  177. err = ecode.Int(res.Code)
  178. return
  179. }
  180. mdl = res.Data
  181. return
  182. }
  183. //RecentFans get a list of recent fans
  184. func (d *Dao) RecentFans(c context.Context, mid int64) (fans []*medal.RecentFans, err error) {
  185. var (
  186. req *http.Request
  187. params = url.Values{}
  188. )
  189. params.Set("uid", strconv.FormatInt(mid, 10))
  190. params.Set("source", "2")
  191. params.Set("size", "10")
  192. if req, err = http.NewRequest("GET", d.recentFansURI+"?"+params.Encode(), nil); err != nil {
  193. log.Error("RecentFans url(%s) error(%v)", d.recentFansURI+"?"+params.Encode(), err)
  194. err = ecode.CreativeFansMedalErr
  195. return
  196. }
  197. req.Header.Set("X-BiliLive-UID", strconv.FormatInt(mid, 10))
  198. var res struct {
  199. Code int `json:"code"`
  200. Data []*medal.RecentFans `json:"data"`
  201. }
  202. if err = d.client.Do(c, req, &res); err != nil {
  203. log.Error("RecentFans url(%s) response(%+v) error(%v)", d.recentFansURI+"?"+params.Encode(), res, err)
  204. err = ecode.CreativeFansMedalErr
  205. return
  206. }
  207. if res.Code != 0 {
  208. log.Error("RecentFans url(%s) res(%v)", d.recentFansURI+"?"+params.Encode(), res)
  209. err = ecode.Int(res.Code)
  210. return
  211. }
  212. fans = res.Data
  213. return
  214. }
  215. //Rank get fans rank list
  216. func (d *Dao) Rank(c context.Context, mid int64) (rank []*medal.FansRank, err error) {
  217. var (
  218. req *http.Request
  219. params = url.Values{}
  220. )
  221. params.Set("uid", strconv.FormatInt(mid, 10))
  222. if req, err = http.NewRequest("GET", d.fansRankURI+"?"+params.Encode(), nil); err != nil {
  223. log.Error("Rank url(%s) error(%v)", d.fansRankURI+"?"+params.Encode(), err)
  224. err = ecode.CreativeFansMedalErr
  225. return
  226. }
  227. req.Header.Set("X-BiliLive-UID", strconv.FormatInt(mid, 10))
  228. var res struct {
  229. Code int `json:"code"`
  230. Data []*medal.FansRank `json:"data"`
  231. }
  232. if err = d.client.Do(c, req, &res); err != nil {
  233. log.Error("Rank url(%s) response(%+v) error(%v)", d.fansRankURI+"?"+params.Encode(), res, err)
  234. err = ecode.CreativeFansMedalErr
  235. return
  236. }
  237. if res.Code != 0 {
  238. log.Error("Rank url(%s) res(%v)", d.fansRankURI+"?"+params.Encode(), res)
  239. err = ecode.Int(res.Code)
  240. return
  241. }
  242. rank = res.Data
  243. return
  244. }
  245. //Rename rename medal name
  246. func (d *Dao) Rename(c context.Context, mid int64, name, ak, ck string) (err error) {
  247. var (
  248. req *http.Request
  249. params = url.Values{}
  250. )
  251. params.Set("uid", strconv.FormatInt(mid, 10))
  252. params.Set("medal_name", name)
  253. params.Set("source", "2")
  254. if ak != "" {
  255. params.Set("access_key", ak)
  256. params.Set("platform", "ios")
  257. } else {
  258. params.Set("platform", "pc")
  259. }
  260. if req, err = http.NewRequest("POST", d.renameURI, strings.NewReader(params.Encode())); err != nil {
  261. log.Error("Rename url(%s) error(%v)", d.renameURI+"?"+params.Encode(), err)
  262. err = ecode.CreativeFansMedalErr
  263. return
  264. }
  265. req.Header.Set("X-BiliLive-UID", strconv.FormatInt(mid, 10))
  266. req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
  267. req.Header.Set("Cookie", ck)
  268. var res struct {
  269. Code int `json:"code"`
  270. }
  271. if err = d.client.Do(c, req, &res); err != nil {
  272. log.Error("Rename url(%s) response(%+v) error(%v)", d.renameURI+"?"+params.Encode(), res, err)
  273. err = ecode.CreativeFansMedalErr
  274. return
  275. }
  276. if res.Code != 0 {
  277. log.Error("Rename url(%s) res(%v)", d.renameURI+"?"+params.Encode(), res)
  278. err = ecode.Int(res.Code)
  279. return
  280. }
  281. return
  282. }