index.ts 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import { Request, RequestHandler, NextFunction, Router } from 'express'
  2. import { Controller } from '../types'
  3. import NotFoundException from '../../exceptions/NotFoundException'
  4. import jsonResponseMiddleware, {
  5. JsonResponse,
  6. } from '../../middleware/jsonResponse.middleware'
  7. import twitterService, { GenerateResult } from '../../services/twitterService'
  8. import { PaginationConnection } from 'sequelize-cursor-pagination'
  9. import { TweetData } from '../../db/models/Tweet'
  10. import { MODIFY_TOKEN } from '../../constants'
  11. // import apiKeyMiddleware from '../../middleware/apikey.middleware'
  12. interface ImportPayload {
  13. token: string
  14. urls: string[]
  15. }
  16. interface TopPayload {
  17. token: string
  18. statusId: string
  19. top?: boolean
  20. }
  21. export default class TweetController implements Controller {
  22. public path = '/api/v1/tweet'
  23. public router = Router()
  24. constructor() {
  25. this.initializeRoutes()
  26. }
  27. private initializeRoutes(): void {
  28. this.router.get(
  29. '/list',
  30. // apiKeyMiddleware(),
  31. jsonResponseMiddleware,
  32. this.list as RequestHandler
  33. )
  34. this.router.post(
  35. '/import',
  36. // apiKeyMiddleware(),
  37. jsonResponseMiddleware,
  38. this.import as RequestHandler
  39. )
  40. this.router.post(
  41. '/top',
  42. // apiKeyMiddleware(),
  43. jsonResponseMiddleware,
  44. this.top as RequestHandler
  45. )
  46. }
  47. private list(
  48. request: Request<any, any, any, { after?: string }>,
  49. response: JsonResponse<PaginationConnection<TweetData>>,
  50. next: NextFunction
  51. ): void {
  52. const after = request.query.after
  53. twitterService
  54. .paginateTweetByOrder(after)
  55. .then((tweets) => {
  56. response.jsonSuccess(tweets)
  57. })
  58. .catch((e) => {
  59. response.status(500).jsonError('Server Error', 1010)
  60. })
  61. }
  62. private import(
  63. request: Request<any, any, ImportPayload>,
  64. response: JsonResponse<GenerateResult[]>,
  65. next: NextFunction
  66. ): void {
  67. const { urls, token } = request.body
  68. if (token !== MODIFY_TOKEN) {
  69. response.status(401).jsonError('Unauthorized', 1012)
  70. return
  71. }
  72. twitterService
  73. .bulkGenerateTweetsByPublishAPI(urls)
  74. .then((tweets) => {
  75. response.jsonSuccess(tweets)
  76. })
  77. .catch((e) => {
  78. response.status(500).jsonError('Server Error', 1011)
  79. })
  80. }
  81. private top(
  82. request: Request<any, any, TopPayload>,
  83. response: JsonResponse<boolean>,
  84. next: NextFunction
  85. ): void {
  86. const { statusId, top, token } = request.body
  87. if (token !== MODIFY_TOKEN) {
  88. response.status(401).jsonError('Unauthorized', 1012)
  89. return
  90. }
  91. twitterService
  92. .makeTweetTop(statusId, top)
  93. .then(() => {
  94. response.jsonSuccess(true)
  95. })
  96. .catch((e) => {
  97. response.status(500).jsonError('Server Error', 1014)
  98. })
  99. }
  100. }