Add ability to sort by originallyPublishedAt
This commit is contained in:
parent
1f41ca6566
commit
2fd59d7d89
|
@ -59,9 +59,9 @@ const SORTABLE_COLUMNS = {
|
||||||
FOLLOWERS: [ 'createdAt', 'state', 'score' ],
|
FOLLOWERS: [ 'createdAt', 'state', 'score' ],
|
||||||
FOLLOWING: [ 'createdAt', 'redundancyAllowed', 'state' ],
|
FOLLOWING: [ 'createdAt', 'redundancyAllowed', 'state' ],
|
||||||
|
|
||||||
VIDEOS: [ 'name', 'duration', 'createdAt', 'publishedAt', 'views', 'likes', 'trending' ],
|
VIDEOS: [ 'name', 'duration', 'createdAt', 'publishedAt', 'originallyPublishedAt', 'views', 'likes', 'trending' ],
|
||||||
|
|
||||||
VIDEOS_SEARCH: [ 'name', 'duration', 'createdAt', 'publishedAt', 'views', 'likes', 'match' ],
|
VIDEOS_SEARCH: [ 'name', 'duration', 'createdAt', 'publishedAt', 'originallyPublishedAt', 'views', 'likes', 'match' ],
|
||||||
VIDEO_CHANNELS_SEARCH: [ 'match', 'displayName', 'createdAt' ],
|
VIDEO_CHANNELS_SEARCH: [ 'match', 'displayName', 'createdAt' ],
|
||||||
|
|
||||||
ACCOUNTS_BLOCKLIST: [ 'createdAt' ],
|
ACCOUNTS_BLOCKLIST: [ 'createdAt' ],
|
||||||
|
|
|
@ -321,6 +321,10 @@ function buildListQuery (model: typeof Model, options: BuildVideosQueryOptions)
|
||||||
if (options.isCount !== true) {
|
if (options.isCount !== true) {
|
||||||
|
|
||||||
if (exists(options.sort)) {
|
if (exists(options.sort)) {
|
||||||
|
if (options.sort === '-originallyPublishedAt' || options.sort === 'originallyPublishedAt') {
|
||||||
|
attributes.push('COALESCE("video"."originallyPublishedAt", "video"."publishedAt") AS "publishedAtForOrder"')
|
||||||
|
}
|
||||||
|
|
||||||
order = buildOrder(model, options.sort)
|
order = buildOrder(model, options.sort)
|
||||||
suffix += `${order} `
|
suffix += `${order} `
|
||||||
}
|
}
|
||||||
|
@ -365,6 +369,8 @@ function buildOrder (model: typeof Model, value: string) {
|
||||||
|
|
||||||
if (field.toLowerCase() === 'match') { // Search
|
if (field.toLowerCase() === 'match') { // Search
|
||||||
firstSort = '"similarity"'
|
firstSort = '"similarity"'
|
||||||
|
} else if (field === 'originallyPublishedAt') {
|
||||||
|
firstSort = '"publishedAtForOrder"'
|
||||||
} else if (field.includes('.')) {
|
} else if (field.includes('.')) {
|
||||||
firstSort = field
|
firstSort = field
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -34,6 +34,7 @@ const expect = chai.expect
|
||||||
describe('Test a single server', function () {
|
describe('Test a single server', function () {
|
||||||
let server: ServerInfo = null
|
let server: ServerInfo = null
|
||||||
let videoId = -1
|
let videoId = -1
|
||||||
|
let videoId2 = -1
|
||||||
let videoUUID = ''
|
let videoUUID = ''
|
||||||
let videosListBase: any[] = null
|
let videosListBase: any[] = null
|
||||||
|
|
||||||
|
@ -237,12 +238,11 @@ describe('Test a single server', function () {
|
||||||
it('Should upload 6 videos', async function () {
|
it('Should upload 6 videos', async function () {
|
||||||
this.timeout(25000)
|
this.timeout(25000)
|
||||||
|
|
||||||
const videos = [
|
const videos = new Set([
|
||||||
'video_short.mp4', 'video_short.ogv', 'video_short.webm',
|
'video_short.mp4', 'video_short.ogv', 'video_short.webm',
|
||||||
'video_short1.webm', 'video_short2.webm', 'video_short3.webm'
|
'video_short1.webm', 'video_short2.webm', 'video_short3.webm'
|
||||||
]
|
])
|
||||||
|
|
||||||
const tasks: Promise<any>[] = []
|
|
||||||
for (const video of videos) {
|
for (const video of videos) {
|
||||||
const videoAttributes = {
|
const videoAttributes = {
|
||||||
name: video + ' name',
|
name: video + ' name',
|
||||||
|
@ -255,11 +255,8 @@ describe('Test a single server', function () {
|
||||||
fixture: video
|
fixture: video
|
||||||
}
|
}
|
||||||
|
|
||||||
const p = uploadVideo(server.url, server.accessToken, videoAttributes)
|
await uploadVideo(server.url, server.accessToken, videoAttributes)
|
||||||
tasks.push(p)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
await Promise.all(tasks)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
it('Should have the correct durations', async function () {
|
it('Should have the correct durations', async function () {
|
||||||
|
@ -345,6 +342,7 @@ describe('Test a single server', function () {
|
||||||
expect(videos[5].name).to.equal('video_short1.webm name')
|
expect(videos[5].name).to.equal('video_short1.webm name')
|
||||||
|
|
||||||
videoId = videos[3].uuid
|
videoId = videos[3].uuid
|
||||||
|
videoId2 = videos[5].uuid
|
||||||
})
|
})
|
||||||
|
|
||||||
it('Should list and sort by trending in descending order', async function () {
|
it('Should list and sort by trending in descending order', async function () {
|
||||||
|
@ -433,6 +431,43 @@ describe('Test a single server', function () {
|
||||||
expect(video.dislikes).to.equal(1)
|
expect(video.dislikes).to.equal(1)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('Should sort by originallyPublishedAt', async function () {
|
||||||
|
{
|
||||||
|
|
||||||
|
{
|
||||||
|
const now = new Date()
|
||||||
|
const attributes = { originallyPublishedAt: now.toISOString() }
|
||||||
|
await updateVideo(server.url, server.accessToken, videoId, attributes)
|
||||||
|
|
||||||
|
const res = await getVideosListSort(server.url, '-originallyPublishedAt')
|
||||||
|
const names = res.body.data.map(v => v.name)
|
||||||
|
|
||||||
|
expect(names[0]).to.equal('my super video updated')
|
||||||
|
expect(names[1]).to.equal('video_short2.webm name')
|
||||||
|
expect(names[2]).to.equal('video_short1.webm name')
|
||||||
|
expect(names[3]).to.equal('video_short.webm name')
|
||||||
|
expect(names[4]).to.equal('video_short.ogv name')
|
||||||
|
expect(names[5]).to.equal('video_short.mp4 name')
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const now = new Date()
|
||||||
|
const attributes = { originallyPublishedAt: now.toISOString() }
|
||||||
|
await updateVideo(server.url, server.accessToken, videoId2, attributes)
|
||||||
|
|
||||||
|
const res = await getVideosListSort(server.url, '-originallyPublishedAt')
|
||||||
|
const names = res.body.data.map(v => v.name)
|
||||||
|
|
||||||
|
expect(names[0]).to.equal('video_short1.webm name')
|
||||||
|
expect(names[1]).to.equal('my super video updated')
|
||||||
|
expect(names[2]).to.equal('video_short2.webm name')
|
||||||
|
expect(names[3]).to.equal('video_short.webm name')
|
||||||
|
expect(names[4]).to.equal('video_short.ogv name')
|
||||||
|
expect(names[5]).to.equal('video_short.mp4 name')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
after(async function () {
|
after(async function () {
|
||||||
await cleanupTests([ server ])
|
await cleanupTests([ server ])
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue