relation.go 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927
  1. package http
  2. import (
  3. "strconv"
  4. "go-common/app/interface/main/account/model"
  5. mrl "go-common/app/service/main/relation/model"
  6. "go-common/library/ecode"
  7. "go-common/library/log"
  8. bm "go-common/library/net/http/blademaster"
  9. "go-common/library/net/metadata"
  10. "go-common/library/xstr"
  11. )
  12. var (
  13. _defaultPS int64 = 50
  14. )
  15. // modify modify user relation.
  16. func modify(c *bm.Context) {
  17. var (
  18. err error
  19. act, fid int64
  20. src uint64
  21. params = c.Request.Form
  22. mid, _ = c.Get("mid")
  23. actStr = params.Get("act")
  24. fidStr = params.Get("fid")
  25. srcStr = params.Get("re_src")
  26. ua = c.Request.Header.Get("User-Agent")
  27. referer = c.Request.Header.Get("Referer")
  28. sid string
  29. realIP = metadata.String(c, metadata.RemoteIP)
  30. )
  31. if act, err = strconv.ParseInt(actStr, 10, 8); err != nil {
  32. c.JSON(nil, ecode.RequestErr)
  33. return
  34. }
  35. if fid, err = strconv.ParseInt(fidStr, 10, 64); err != nil || fid <= 0 {
  36. c.JSON(nil, ecode.RequestErr)
  37. return
  38. }
  39. if src, err = strconv.ParseUint(srcStr, 10, 64); err != nil {
  40. c.JSON(nil, ecode.RequestErr)
  41. return
  42. }
  43. sidCookie, err := c.Request.Cookie("sid")
  44. if err != nil {
  45. log.Warn("relation infoc get sid failed error(%v)", err)
  46. } else {
  47. sid = sidCookie.Value
  48. }
  49. buvid := c.Request.Header.Get("Buvid")
  50. if buvid == "" {
  51. buvidCookie, _ := c.Request.Cookie("buvid3")
  52. if buvidCookie != nil {
  53. buvid = buvidCookie.Value
  54. }
  55. }
  56. ric := map[string]string{
  57. "ip": realIP,
  58. "User-Agent": ua,
  59. "sid": sid,
  60. "buvid": buvid,
  61. "Referer": referer,
  62. }
  63. c.JSON(nil, relationSvc.Modify(c, mid.(int64), fid, int8(act), uint8(src), ric))
  64. }
  65. func batchModify(c *bm.Context) {
  66. var (
  67. err error
  68. act int64
  69. fids []int64
  70. src uint64
  71. params = c.Request.Form
  72. // res = c.Result()
  73. mid, _ = c.Get("mid")
  74. actStr = params.Get("act")
  75. fidsStr = params.Get("fids")
  76. srcStr = params.Get("re_src")
  77. ua = c.Request.Header.Get("User-Agent")
  78. referer = c.Request.Header.Get("Referer")
  79. sid string
  80. realIP = metadata.String(c, metadata.RemoteIP)
  81. )
  82. if act, err = strconv.ParseInt(actStr, 10, 8); err != nil {
  83. // res["code"] = ecode.RequestErr
  84. c.JSON(nil, ecode.RequestErr)
  85. return
  86. }
  87. if fids, err = xstr.SplitInts(fidsStr); err != nil || len(fids) <= 0 {
  88. c.JSON(nil, ecode.RequestErr)
  89. return
  90. }
  91. if src, err = strconv.ParseUint(srcStr, 10, 64); err != nil {
  92. // res["code"] = ecode.RequestErr
  93. c.JSON(nil, ecode.RequestErr)
  94. return
  95. }
  96. sidCookie, err := c.Request.Cookie("sid")
  97. if err != nil {
  98. log.Warn("relation infoc get sid failed error(%v)", err)
  99. } else {
  100. sid = sidCookie.Value
  101. }
  102. buvid := c.Request.Header.Get("Buvid")
  103. if buvid == "" {
  104. buvidCookie, _ := c.Request.Cookie("buvid3")
  105. if buvidCookie != nil {
  106. buvid = buvidCookie.Value
  107. }
  108. }
  109. ric := map[string]string{
  110. "ip": realIP,
  111. "User-Agent": ua,
  112. "sid": sid,
  113. "buvid": buvid,
  114. "Referer": referer,
  115. }
  116. // res["code"] = relationSvc.Modify(c, mid.(int64), fid, int8(act), uint8(src), ric)
  117. c.JSON(relationSvc.BatchModify(c, mid.(int64), fids, int8(act), uint8(src), ric))
  118. }
  119. // relation get relation between mid and fid.
  120. func relation(c *bm.Context) {
  121. var (
  122. err error
  123. fid int64
  124. f *mrl.Following
  125. params = c.Request.Form
  126. fidStr = params.Get("fid")
  127. mid, _ = c.Get("mid")
  128. )
  129. if fid, err = strconv.ParseInt(fidStr, 10, 64); err != nil {
  130. c.JSON(nil, ecode.RequestErr)
  131. return
  132. }
  133. if f, err = relationSvc.Relation(c, mid.(int64), fid); err != nil {
  134. log.Error("relationSvc.Relation(%d, %d) error(%v)", mid, fid, err)
  135. c.JSON(nil, err)
  136. return
  137. }
  138. c.JSON(f, nil)
  139. }
  140. // relations get relations between mid and fids.
  141. func relations(c *bm.Context) {
  142. var (
  143. err error
  144. fm map[int64]*mrl.Following
  145. fids []int64
  146. params = c.Request.Form
  147. fidsStr = params.Get("fids")
  148. mid, _ = c.Get("mid")
  149. )
  150. if fids, err = xstr.SplitInts(fidsStr); err != nil {
  151. c.JSON(nil, ecode.RequestErr)
  152. log.Error("xstr.SplitInts(fids %v) err(%v)", fidsStr, err)
  153. return
  154. }
  155. if fm, err = relationSvc.Relations(c, mid.(int64), fids); err != nil {
  156. log.Error("relationSvc.Relations(%d, %v) error(%v)", mid, fids, err)
  157. c.JSON(nil, err)
  158. return
  159. }
  160. c.JSON(fm, nil)
  161. }
  162. // followings get user's following list.
  163. func followings(c *bm.Context) {
  164. var (
  165. err error
  166. mid, vmid int64
  167. pn, ps int64
  168. self bool
  169. followings []*model.Following
  170. params = c.Request.Form
  171. vmidStr = params.Get("vmid")
  172. psStr = params.Get("ps")
  173. pnStr = params.Get("pn")
  174. order = params.Get("order")
  175. version uint64
  176. versionStr = params.Get("re_version")
  177. crc32v uint32
  178. total int
  179. )
  180. midS, ok := c.Get("mid")
  181. if ok {
  182. mid = midS.(int64)
  183. } else {
  184. mid = 0
  185. }
  186. if vmid, err = strconv.ParseInt(vmidStr, 10, 64); err != nil || vmid <= 0 {
  187. c.JSON(nil, ecode.RequestErr)
  188. return
  189. }
  190. self = mid == vmid
  191. if pnStr != "" {
  192. if pn, err = strconv.ParseInt(pnStr, 10, 64); err != nil {
  193. c.JSON(nil, ecode.RequestErr)
  194. return
  195. }
  196. }
  197. if pn <= 0 {
  198. pn = 1
  199. }
  200. if !self && pn > 5 {
  201. c.JSON(nil, ecode.RelFollowingGuestLimit)
  202. return
  203. }
  204. if psStr != "" {
  205. if ps, err = strconv.ParseInt(psStr, 10, 64); err != nil {
  206. c.JSON(nil, ecode.RequestErr)
  207. return
  208. }
  209. }
  210. if ps <= 0 || ps > _defaultPS {
  211. ps = _defaultPS
  212. }
  213. if versionStr != "" {
  214. if version, err = strconv.ParseUint(versionStr, 10, 64); err != nil {
  215. c.JSON(nil, ecode.RequestErr)
  216. return
  217. }
  218. }
  219. if order != "asc" {
  220. order = "desc"
  221. }
  222. if followings, crc32v, total, err = relationSvc.Followings(c, vmid, mid, pn, ps, version, order); err != nil {
  223. log.Error("relationSvc.Followings(%d) error(%v)", vmid, err)
  224. c.JSON(nil, err)
  225. return
  226. }
  227. c.JSON(map[string]interface{}{
  228. "re_version": uint64(crc32v),
  229. "list": followings,
  230. "total": total,
  231. }, nil)
  232. }
  233. // followers get user's follower list.
  234. func followers(c *bm.Context) {
  235. var (
  236. err error
  237. mid, vmid int64
  238. pn, ps int64
  239. self bool
  240. fs []*model.Following
  241. params = c.Request.Form
  242. vmidStr = params.Get("vmid")
  243. psStr = params.Get("ps")
  244. pnStr = params.Get("pn")
  245. version uint64
  246. total int
  247. versionStr = params.Get("re_version")
  248. crc32v uint32
  249. )
  250. midS, ok := c.Get("mid")
  251. if ok {
  252. mid = midS.(int64)
  253. } else {
  254. mid = 0
  255. }
  256. if vmid, err = strconv.ParseInt(vmidStr, 10, 64); err != nil || vmid <= 0 {
  257. c.JSON(nil, ecode.RequestErr)
  258. return
  259. }
  260. self = mid == vmid
  261. if pnStr != "" {
  262. if pn, err = strconv.ParseInt(pnStr, 10, 64); err != nil {
  263. c.JSON(nil, ecode.RequestErr)
  264. return
  265. }
  266. }
  267. if pn <= 0 {
  268. pn = 1
  269. }
  270. if !self && pn > 5 {
  271. c.JSON(nil, ecode.RelFollowingGuestLimit)
  272. return
  273. }
  274. if psStr != "" {
  275. if ps, err = strconv.ParseInt(psStr, 10, 64); err != nil {
  276. c.JSON(nil, ecode.RequestErr)
  277. return
  278. }
  279. }
  280. if ps <= 0 || ps > _defaultPS {
  281. ps = _defaultPS
  282. }
  283. if versionStr != "" {
  284. if version, err = strconv.ParseUint(versionStr, 10, 64); err != nil {
  285. c.JSON(nil, ecode.RequestErr)
  286. return
  287. }
  288. }
  289. if fs, crc32v, total, err = relationSvc.Followers(c, vmid, mid, pn, ps, version); err != nil {
  290. log.Error("relationSvc.Followers(%d) error(%v)", mid, err)
  291. c.JSON(nil, err)
  292. return
  293. }
  294. c.JSON(map[string]interface{}{
  295. "re_version": uint64(crc32v),
  296. "list": fs,
  297. "total": total,
  298. }, nil)
  299. }
  300. // friends get user's friends list: follow eachother.
  301. func friends(c *bm.Context) {
  302. var (
  303. err error
  304. mid, _ = c.Get("mid")
  305. followings []*model.Following
  306. params = c.Request.Form
  307. version uint64
  308. versionStr = params.Get("re_version")
  309. crc32v uint32
  310. )
  311. if versionStr != "" {
  312. if version, err = strconv.ParseUint(versionStr, 10, 64); err != nil {
  313. c.JSON(nil, ecode.RequestErr)
  314. return
  315. }
  316. }
  317. if followings, crc32v, err = relationSvc.Friends(c, mid.(int64), version); err != nil {
  318. log.Error("relationSvc.Followings(%d) error(%v)", mid, err)
  319. c.JSON(nil, err)
  320. return
  321. }
  322. c.JSON(map[string]interface{}{
  323. "re_version": uint64(crc32v),
  324. "list": followings,
  325. }, nil)
  326. }
  327. // Blacks get user's black list.
  328. func blacks(c *bm.Context) {
  329. var (
  330. err error
  331. blacks []*model.Following
  332. mid, _ = c.Get("mid")
  333. params = c.Request.Form
  334. version uint64
  335. pn, ps int64
  336. total int
  337. pnStr = params.Get("pn")
  338. psStr = params.Get("ps")
  339. versionStr = params.Get("re_version")
  340. crc32v uint32
  341. )
  342. if versionStr != "" {
  343. if version, err = strconv.ParseUint(versionStr, 10, 64); err != nil {
  344. c.JSON(nil, ecode.RequestErr)
  345. return
  346. }
  347. }
  348. if pnStr != "" {
  349. if pn, err = strconv.ParseInt(pnStr, 10, 64); err != nil {
  350. c.JSON(nil, ecode.RequestErr)
  351. return
  352. }
  353. }
  354. if pn <= 0 {
  355. pn = 1
  356. }
  357. if psStr != "" {
  358. if ps, err = strconv.ParseInt(psStr, 10, 64); err != nil {
  359. c.JSON(nil, ecode.RequestErr)
  360. return
  361. }
  362. }
  363. if ps <= 0 || ps > _defaultPS {
  364. ps = _defaultPS
  365. }
  366. if blacks, crc32v, total, err = relationSvc.Blacks(c, mid.(int64), version, pn, ps); err != nil {
  367. log.Error("relationSvc.Blacks(%d) error(%v)", mid, err)
  368. c.JSON(nil, err)
  369. return
  370. }
  371. c.JSON(map[string]interface{}{
  372. "re_version": uint64(crc32v),
  373. "list": blacks,
  374. "total": total,
  375. }, nil)
  376. }
  377. // whispers get user's whisper list.
  378. func whispers(c *bm.Context) {
  379. var (
  380. err error
  381. pn, ps int64
  382. version uint64
  383. crc32v uint32
  384. whispers []*model.Following
  385. mid, _ = c.Get("mid")
  386. params = c.Request.Form
  387. psStr = params.Get("ps")
  388. pnStr = params.Get("pn")
  389. versionStr = params.Get("re_version")
  390. )
  391. if versionStr != "" {
  392. if version, err = strconv.ParseUint(versionStr, 10, 64); err != nil {
  393. c.JSON(nil, ecode.RequestErr)
  394. return
  395. }
  396. }
  397. if pnStr != "" {
  398. if pn, err = strconv.ParseInt(pnStr, 10, 64); err != nil {
  399. c.JSON(nil, ecode.RequestErr)
  400. return
  401. }
  402. }
  403. if pn <= 0 {
  404. pn = 1
  405. }
  406. if psStr != "" {
  407. if ps, err = strconv.ParseInt(psStr, 10, 64); err != nil {
  408. c.JSON(nil, ecode.RequestErr)
  409. return
  410. }
  411. }
  412. if ps <= 0 || ps > _defaultPS {
  413. ps = _defaultPS
  414. }
  415. if whispers, crc32v, err = relationSvc.Whispers(c, mid.(int64), pn, ps, version); err != nil {
  416. log.Error("relationSvc.Whispers(%d) error(%v)", mid, err)
  417. c.JSON(nil, err)
  418. return
  419. }
  420. c.JSON(map[string]interface{}{
  421. "re_version": uint64(crc32v),
  422. "list": whispers,
  423. }, nil)
  424. }
  425. // stat get user's follower list.
  426. func stat(c *bm.Context) {
  427. var (
  428. err error
  429. mid, vmid int64
  430. self bool
  431. st *mrl.Stat
  432. params = c.Request.Form
  433. vmidStr = params.Get("vmid")
  434. )
  435. midS, ok := c.Get("mid")
  436. if ok {
  437. mid = midS.(int64)
  438. } else {
  439. mid = 0
  440. }
  441. if vmid, err = strconv.ParseInt(vmidStr, 10, 64); err != nil || vmid <= 0 {
  442. c.JSON(nil, ecode.RequestErr)
  443. return
  444. }
  445. self = mid == vmid
  446. if st, err = relationSvc.Stat(c, vmid, self); err != nil {
  447. log.Error("relationSvc.Followers(%d) error(%v)", mid, err)
  448. c.JSON(nil, err)
  449. return
  450. }
  451. c.JSON(st, nil)
  452. }
  453. // stat get user's follower list.
  454. func stats(c *bm.Context) {
  455. var (
  456. err error
  457. params = c.Request.Form
  458. midsStr = params.Get("mids")
  459. )
  460. mids, err := xstr.SplitInts(midsStr)
  461. if err != nil || len(mids) > 20 {
  462. c.JSON(nil, ecode.RequestErr)
  463. return
  464. }
  465. sts, err := relationSvc.Stats(c, mids)
  466. if err != nil {
  467. c.JSON(nil, err)
  468. return
  469. }
  470. c.JSON(sts, nil)
  471. }
  472. // tag 单个标签
  473. func tag(c *bm.Context) {
  474. var (
  475. err error
  476. pn, ps int64
  477. mid, _ = c.Get("mid")
  478. params = c.Request.Form
  479. tagIDStr = params.Get("tagid")
  480. tagid int64
  481. psStr = params.Get("ps")
  482. pnStr = params.Get("pn")
  483. ti []*model.Tag
  484. )
  485. if tagIDStr == "" {
  486. c.JSON(nil, ecode.RequestErr)
  487. return
  488. }
  489. if tagid, err = strconv.ParseInt(tagIDStr, 10, 64); err != nil {
  490. c.JSON(nil, ecode.RequestErr)
  491. return
  492. }
  493. if pnStr != "" {
  494. if pn, err = strconv.ParseInt(pnStr, 10, 64); err != nil {
  495. log.Error("pn parse")
  496. c.JSON(nil, ecode.RequestErr)
  497. return
  498. }
  499. }
  500. if pn <= 0 {
  501. pn = 1
  502. }
  503. if psStr != "" {
  504. if ps, err = strconv.ParseInt(psStr, 10, 64); err != nil {
  505. c.JSON(nil, ecode.RequestErr)
  506. return
  507. }
  508. }
  509. if ps <= 0 || ps > _defaultPS {
  510. ps = _defaultPS
  511. }
  512. if ti, err = relationSvc.Tag(c, mid.(int64), tagid, pn, ps); err != nil {
  513. log.Error("relationSvc.Tag(%d).tag(%d) error(%v)", mid, tagid, err)
  514. c.JSON(nil, err)
  515. return
  516. }
  517. c.JSON(ti, nil)
  518. }
  519. // tags 列表:标签-计数
  520. func tags(c *bm.Context) {
  521. var (
  522. err error
  523. mid, _ = c.Get("mid")
  524. tc []*mrl.TagCount
  525. )
  526. if tc, err = relationSvc.Tags(c, mid.(int64)); err != nil {
  527. log.Error("relationSvc.Tags(%d). error(%v)", mid, err)
  528. c.JSON(nil, err)
  529. return
  530. }
  531. c.JSON(tc, nil)
  532. }
  533. // mobileTags 移动端 列表:标签-计数
  534. func mobileTags(c *bm.Context) {
  535. var (
  536. err error
  537. mid, _ = c.Get("mid")
  538. tc map[string][]*mrl.TagCount
  539. )
  540. if tc, err = relationSvc.MobileTags(c, mid.(int64)); err != nil {
  541. log.Error("relationSvc.Tags(%d). error(%v)", mid, err)
  542. c.JSON(nil, err)
  543. return
  544. }
  545. c.JSON(tc, nil)
  546. }
  547. // tagUser 用户-fid 标签列表
  548. func tagUser(c *bm.Context) {
  549. var (
  550. err error
  551. fid int64
  552. mid, _ = c.Get("mid")
  553. params = c.Request.Form
  554. fidStr = params.Get("fid")
  555. tc map[int64]string
  556. )
  557. if fid, err = strconv.ParseInt(fidStr, 10, 64); err != nil || fid <= 0 {
  558. c.JSON(nil, ecode.RequestErr)
  559. return
  560. }
  561. if tc, err = relationSvc.UserTag(c, mid.(int64), fid); err != nil {
  562. log.Error("relationSvc.UserTag(%d).fid(%d) error(%v)", mid, fid, err)
  563. c.JSON(nil, err)
  564. return
  565. }
  566. c.JSON(tc, nil)
  567. }
  568. // tagCreate create tag.
  569. func tagCreate(c *bm.Context) {
  570. var (
  571. err error
  572. mid, _ = c.Get("mid")
  573. params = c.Request.Form
  574. tagStr = params.Get("tag")
  575. cres int64
  576. )
  577. if tagStr == "" {
  578. c.JSON(nil, ecode.RequestErr)
  579. return
  580. }
  581. if cres, err = relationSvc.CreateTag(c, mid.(int64), tagStr); err != nil {
  582. c.JSON(nil, err)
  583. return
  584. }
  585. c.JSON(map[string]int64{
  586. "tagid": cres,
  587. }, nil)
  588. }
  589. // tagUpdate update tag.
  590. func tagUpdate(c *bm.Context) {
  591. var (
  592. err error
  593. mid, _ = c.Get("mid")
  594. params = c.Request.Form
  595. tagIDStr = params.Get("tagid")
  596. tagID int64
  597. newStr = params.Get("name")
  598. )
  599. if tagIDStr == "" || newStr == "" {
  600. c.JSON(nil, ecode.RequestErr)
  601. return
  602. }
  603. if tagID, err = strconv.ParseInt(tagIDStr, 10, 64); err != nil || tagID <= 0 {
  604. c.JSON(nil, ecode.RequestErr)
  605. return
  606. }
  607. c.JSON(nil, relationSvc.UpdateTag(c, mid.(int64), tagID, newStr))
  608. }
  609. // tagDel del tag.
  610. func tagDel(c *bm.Context) {
  611. var (
  612. err error
  613. mid, _ = c.Get("mid")
  614. params = c.Request.Form
  615. tagIDStr = params.Get("tagid")
  616. tagID int64
  617. )
  618. if tagIDStr == "" {
  619. c.JSON(nil, ecode.RequestErr)
  620. return
  621. }
  622. if tagID, err = strconv.ParseInt(tagIDStr, 10, 64); err != nil || tagID <= 0 {
  623. c.JSON(nil, ecode.RequestErr)
  624. return
  625. }
  626. c.JSON(nil, relationSvc.DelTag(c, mid.(int64), tagID))
  627. }
  628. // tagsAddUsers tags add users.
  629. func tagsAddUsers(c *bm.Context) {
  630. var (
  631. mid, _ = c.Get("mid")
  632. params = c.Request.Form
  633. tagidsStr = params.Get("tagids")
  634. fidsStr = params.Get("fids")
  635. )
  636. if tagidsStr == "" || fidsStr == "" {
  637. c.JSON(nil, ecode.RequestErr)
  638. return
  639. }
  640. c.JSON(nil, relationSvc.TagsAddUsers(c, mid.(int64), tagidsStr, fidsStr))
  641. }
  642. // tagsCopyUsers tags copy users.
  643. func tagsCopyUsers(c *bm.Context) {
  644. var (
  645. mid, _ = c.Get("mid")
  646. params = c.Request.Form
  647. tagidsStr = params.Get("tagids")
  648. fidsStr = params.Get("fids")
  649. )
  650. if tagidsStr == "" || fidsStr == "" {
  651. c.JSON(nil, ecode.RequestErr)
  652. return
  653. }
  654. c.JSON(nil, relationSvc.TagsCopyUsers(c, mid.(int64), tagidsStr, fidsStr))
  655. }
  656. // tagsMoveUsers tags move users.
  657. func tagsMoveUsers(c *bm.Context) {
  658. var (
  659. mid, _ = c.Get("mid")
  660. params = c.Request.Form
  661. beforeTagIdsStr = params.Get("beforeTagids")
  662. afterTagIdsStr = params.Get("afterTagids")
  663. fidsStr = params.Get("fids")
  664. )
  665. if beforeTagIdsStr == "" || afterTagIdsStr == "" || fidsStr == "" {
  666. c.JSON(nil, ecode.RequestErr)
  667. return
  668. }
  669. bid, err := strconv.ParseInt(beforeTagIdsStr, 10, 64)
  670. if err != nil {
  671. c.JSON(nil, ecode.RequestErr)
  672. return
  673. }
  674. c.JSON(nil, relationSvc.TagsMoveUsers(c, mid.(int64), bid, afterTagIdsStr, fidsStr))
  675. }
  676. func prompt(c *bm.Context) {
  677. mid, _ := c.Get("mid")
  678. arg := new(mrl.ArgPrompt)
  679. if err := c.Bind(arg); err != nil {
  680. c.JSON(nil, ecode.RequestErr)
  681. return
  682. }
  683. arg.Mid = mid.(int64)
  684. b, err := relationSvc.Prompt(c, arg)
  685. if err != nil {
  686. c.JSON(nil, err)
  687. return
  688. }
  689. c.JSON(map[string]interface{}{
  690. "prompt": b,
  691. }, nil)
  692. }
  693. func closePrompt(c *bm.Context) {
  694. mid, _ := c.Get("mid")
  695. arg := new(mrl.ArgPrompt)
  696. if err := c.Bind(arg); err != nil {
  697. return
  698. }
  699. arg.Mid = mid.(int64)
  700. c.JSON(nil, relationSvc.ClosePrompt(c, arg))
  701. }
  702. func addSpecial(c *bm.Context) {
  703. mid, _ := c.Get("mid")
  704. arg := new(mrl.ArgFollowing)
  705. if err := c.Bind(arg); err != nil {
  706. return
  707. }
  708. arg.Mid = mid.(int64)
  709. c.JSON(nil, relationSvc.AddSpecial(c, arg))
  710. }
  711. func delSpecial(c *bm.Context) {
  712. mid, _ := c.Get("mid")
  713. arg := new(mrl.ArgFollowing)
  714. if err := c.Bind(arg); err != nil {
  715. return
  716. }
  717. arg.Mid = mid.(int64)
  718. c.JSON(nil, relationSvc.DelSpecial(c, arg))
  719. }
  720. func special(c *bm.Context) {
  721. mid, _ := c.Get("mid")
  722. c.JSON(relationSvc.Special(c, mid.(int64)))
  723. }
  724. // recommend get global recommend upper.
  725. // deprecated
  726. func recommend(c *bm.Context) {
  727. c.JSON([]interface{}{}, nil)
  728. }
  729. func recommendFollowlistEmpty(c *bm.Context) {
  730. dev, _ := c.Get("device")
  731. mid, _ := c.Get("mid")
  732. arg := &model.ArgRecommend{}
  733. if err := c.Bind(arg); err != nil {
  734. return
  735. }
  736. arg.Device = dev.(*bm.Device)
  737. arg.Mid = mid.(int64)
  738. arg.RemoteIP = metadata.String(c, metadata.RemoteIP)
  739. c.JSON(relationSvc.RecommendFollowlistEmpty(c, arg))
  740. }
  741. func recommendAnswerOK(c *bm.Context) {
  742. dev, _ := c.Get("device")
  743. mid, _ := c.Get("mid")
  744. arg := &model.ArgRecommend{}
  745. if err := c.Bind(arg); err != nil {
  746. return
  747. }
  748. arg.Device = dev.(*bm.Device)
  749. arg.Mid = mid.(int64)
  750. arg.RemoteIP = metadata.String(c, metadata.RemoteIP)
  751. c.JSON(relationSvc.RecommendAnswerOK(c, arg))
  752. }
  753. func recommendTagSuggest(c *bm.Context) {
  754. dev, _ := c.Get("device")
  755. mid, _ := c.Get("mid")
  756. arg := &model.ArgTagSuggestRecommend{}
  757. if err := c.Bind(arg); err != nil {
  758. return
  759. }
  760. arg.Device = dev.(*bm.Device)
  761. arg.Mid = mid.(int64)
  762. arg.RemoteIP = metadata.String(c, metadata.RemoteIP)
  763. c.JSON(relationSvc.RecommendTagSuggest(c, arg))
  764. }
  765. func recommendTagSuggestDetail(c *bm.Context) {
  766. dev, _ := c.Get("device")
  767. mid, _ := c.Get("mid")
  768. arg := &model.ArgTagSuggestRecommend{}
  769. if err := c.Bind(arg); err != nil {
  770. return
  771. }
  772. if arg.TagName == "" {
  773. c.JSON(nil, ecode.RequestErr)
  774. return
  775. }
  776. arg.Device = dev.(*bm.Device)
  777. arg.Mid = mid.(int64)
  778. arg.RemoteIP = metadata.String(c, metadata.RemoteIP)
  779. c.JSON(relationSvc.RecommendTagSuggestDetail(c, arg))
  780. }
  781. // unread check unread status, for the 'show red point' function.
  782. func unread(c *bm.Context) {
  783. var (
  784. err error
  785. mid, _ = c.Get("mid")
  786. show bool
  787. )
  788. disbaleAutoReset := c.Request.Form.Get("disableautoreset") == "1"
  789. if show, err = relationSvc.Unread(c, mid.(int64), disbaleAutoReset); err != nil {
  790. log.Error("relationSvc.Unread(%d) err(%v)", mid, err)
  791. c.JSON(nil, err)
  792. return
  793. }
  794. c.JSON(map[string]interface{}{
  795. "show": show,
  796. }, nil)
  797. }
  798. func unreadReset(c *bm.Context) {
  799. var (
  800. mid, _ = c.Get("mid")
  801. )
  802. c.JSON(nil, relationSvc.ResetUnread(c, mid.(int64)))
  803. }
  804. func unreadCount(c *bm.Context) {
  805. var (
  806. err error
  807. mid, _ = c.Get("mid")
  808. count int64
  809. )
  810. disbaleAutoReset := c.Request.Form.Get("disableautoreset") == "1"
  811. if count, err = relationSvc.UnreadCount(c, mid.(int64), disbaleAutoReset); err != nil {
  812. log.Error("relationSvc.UnreadCount(%d) err(%v)", mid, err)
  813. return
  814. }
  815. c.JSON(map[string]interface{}{
  816. "count": count,
  817. }, nil)
  818. }
  819. func unreadCountReset(c *bm.Context) {
  820. var (
  821. mid, _ = c.Get("mid")
  822. )
  823. c.JSON(nil, relationSvc.ResetUnreadCount(c, mid.(int64)))
  824. }
  825. func achieveGet(ctx *bm.Context) {
  826. arg := new(model.ArgAchieveGet)
  827. if err := ctx.Bind(arg); err != nil {
  828. return
  829. }
  830. mid, _ := ctx.Get("mid")
  831. arg.Mid = mid.(int64)
  832. if arg.Award != "10k" {
  833. ctx.JSON(nil, ecode.RequestErr)
  834. return
  835. }
  836. ctx.JSON(relationSvc.AchieveGet(ctx, arg))
  837. }
  838. func achieve(ctx *bm.Context) {
  839. arg := new(model.ArgAchieve)
  840. if err := ctx.Bind(arg); err != nil {
  841. return
  842. }
  843. ctx.JSON(relationSvc.Achieve(ctx, arg))
  844. }
  845. func followerNotifySetting(c *bm.Context) {
  846. var mid, _ = c.Get("mid")
  847. c.JSON(relationSvc.FollowerNotifySetting(c, mid.(int64)))
  848. }
  849. func enableFollowerNotify(c *bm.Context) {
  850. var mid, _ = c.Get("mid")
  851. c.JSON(nil, relationSvc.EnableFollowerNotify(c, mid.(int64)))
  852. }
  853. func disableFollowerNotify(c *bm.Context) {
  854. var mid, _ = c.Get("mid")
  855. c.JSON(nil, relationSvc.DisableFollowerNotify(c, mid.(int64)))
  856. }
  857. func sameFollowings(c *bm.Context) {
  858. arg := new(model.ArgSameFollowing)
  859. if err := c.Bind(arg); err != nil {
  860. return
  861. }
  862. mid, _ := c.Get("mid")
  863. arg.Mid = mid.(int64)
  864. if arg.Order != "asc" {
  865. arg.Order = "desc"
  866. }
  867. if arg.PN <= 0 {
  868. arg.PN = 1
  869. }
  870. if arg.PS <= 0 || arg.PS > _defaultPS {
  871. arg.PS = _defaultPS
  872. }
  873. followings, crc32v, total, err := relationSvc.SameFollowings(c, arg)
  874. if err != nil {
  875. log.Error("relationSvc.SameFollowings(%+v) error(%v)", arg, err)
  876. c.JSON(nil, err)
  877. return
  878. }
  879. c.JSON(map[string]interface{}{
  880. "re_version": uint64(crc32v),
  881. "list": followings,
  882. "total": total,
  883. }, nil)
  884. }