sort.ts 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import express from 'express'
  2. import { query } from 'express-validator'
  3. import { SORTABLE_COLUMNS } from '../../initializers/constants'
  4. import { areValidationErrors } from './shared'
  5. export const adminUsersSortValidator = checkSortFactory(SORTABLE_COLUMNS.ADMIN_USERS)
  6. export const accountsSortValidator = checkSortFactory(SORTABLE_COLUMNS.ACCOUNTS)
  7. export const jobsSortValidator = checkSortFactory(SORTABLE_COLUMNS.JOBS, [ 'jobs' ])
  8. export const abusesSortValidator = checkSortFactory(SORTABLE_COLUMNS.ABUSES)
  9. export const videosSortValidator = checkSortFactory(SORTABLE_COLUMNS.VIDEOS)
  10. export const videoImportsSortValidator = checkSortFactory(SORTABLE_COLUMNS.VIDEO_IMPORTS)
  11. export const videosSearchSortValidator = checkSortFactory(SORTABLE_COLUMNS.VIDEOS_SEARCH)
  12. export const videoChannelsSearchSortValidator = checkSortFactory(SORTABLE_COLUMNS.VIDEO_CHANNELS_SEARCH)
  13. export const videoPlaylistsSearchSortValidator = checkSortFactory(SORTABLE_COLUMNS.VIDEO_PLAYLISTS_SEARCH)
  14. export const videoCommentsValidator = checkSortFactory(SORTABLE_COLUMNS.VIDEO_COMMENTS)
  15. export const videoCommentThreadsSortValidator = checkSortFactory(SORTABLE_COLUMNS.VIDEO_COMMENT_THREADS)
  16. export const videoRatesSortValidator = checkSortFactory(SORTABLE_COLUMNS.VIDEO_RATES)
  17. export const blacklistSortValidator = checkSortFactory(SORTABLE_COLUMNS.BLACKLISTS)
  18. export const videoChannelsSortValidator = checkSortFactory(SORTABLE_COLUMNS.VIDEO_CHANNELS)
  19. export const instanceFollowersSortValidator = checkSortFactory(SORTABLE_COLUMNS.INSTANCE_FOLLOWERS)
  20. export const instanceFollowingSortValidator = checkSortFactory(SORTABLE_COLUMNS.INSTANCE_FOLLOWING)
  21. export const userSubscriptionsSortValidator = checkSortFactory(SORTABLE_COLUMNS.USER_SUBSCRIPTIONS)
  22. export const accountsBlocklistSortValidator = checkSortFactory(SORTABLE_COLUMNS.ACCOUNTS_BLOCKLIST)
  23. export const serversBlocklistSortValidator = checkSortFactory(SORTABLE_COLUMNS.SERVERS_BLOCKLIST)
  24. export const userNotificationsSortValidator = checkSortFactory(SORTABLE_COLUMNS.USER_NOTIFICATIONS)
  25. export const videoPlaylistsSortValidator = checkSortFactory(SORTABLE_COLUMNS.VIDEO_PLAYLISTS)
  26. export const pluginsSortValidator = checkSortFactory(SORTABLE_COLUMNS.PLUGINS)
  27. export const availablePluginsSortValidator = checkSortFactory(SORTABLE_COLUMNS.AVAILABLE_PLUGINS)
  28. export const videoRedundanciesSortValidator = checkSortFactory(SORTABLE_COLUMNS.VIDEO_REDUNDANCIES)
  29. export const videoChannelSyncsSortValidator = checkSortFactory(SORTABLE_COLUMNS.VIDEO_CHANNEL_SYNCS)
  30. export const accountsFollowersSortValidator = checkSortFactory(SORTABLE_COLUMNS.ACCOUNT_FOLLOWERS)
  31. export const videoChannelsFollowersSortValidator = checkSortFactory(SORTABLE_COLUMNS.CHANNEL_FOLLOWERS)
  32. export const userRegistrationsSortValidator = checkSortFactory(SORTABLE_COLUMNS.USER_REGISTRATIONS)
  33. // ---------------------------------------------------------------------------
  34. function checkSortFactory (columns: string[], tags: string[] = []) {
  35. return checkSort(createSortableColumns(columns), tags)
  36. }
  37. function checkSort (sortableColumns: string[], tags: string[] = []) {
  38. return [
  39. query('sort')
  40. .optional()
  41. .isIn(sortableColumns),
  42. (req: express.Request, res: express.Response, next: express.NextFunction) => {
  43. if (areValidationErrors(req, res, { tags })) return
  44. return next()
  45. }
  46. ]
  47. }
  48. function createSortableColumns (sortableColumns: string[]) {
  49. const sortableColumnDesc = sortableColumns.map(sortableColumn => '-' + sortableColumn)
  50. return sortableColumns.concat(sortableColumnDesc)
  51. }