Compare commits

...

1 Commits

Author SHA1 Message Date
Dan Ribbens
65fc51a988 fix(db-postgres): WIP sorting on versions 2023-10-11 13:16:40 -04:00
4 changed files with 53 additions and 3 deletions

View File

@@ -15,6 +15,7 @@ type Args = Omit<FindArgs, 'collection'> & {
adapter: PostgresAdapter
fields: Field[]
tableName: string
version?: boolean
}
export const findMany = async function find({
@@ -26,8 +27,9 @@ export const findMany = async function find({
pagination,
req = {} as PayloadRequest,
skip,
sort,
sort: sortArg,
tableName,
version,
where: whereArg,
}: Args) {
const db = adapter.sessions[req.transactionID]?.db || adapter.drizzle
@@ -40,6 +42,11 @@ export const findMany = async function find({
let hasNextPage: boolean
let pagingCounter: number
let selectDistinctResult
let sort = sortArg
if (version && sort) {
const direction = sort[0] === '-' ? '-' : ''
sort = `${direction}version.${direction.length === 1 ? sort.substring(1) : sort}`
}
const { joinAliases, joins, orderBy, selectFields, where } = await buildQuery({
adapter,
@@ -150,7 +157,10 @@ export const findMany = async function find({
const countResult = await chainMethods({
methods: selectCountMethods,
query: db
.select({ count: sql<number>`count(*)` })
.select({
count: sql<number>`count
(*)`,
})
.from(table)
.where(where),
})

View File

@@ -39,6 +39,7 @@ export const findVersions: FindVersions = async function findVersions(
skip,
sort,
tableName,
version: true,
where,
})
}

View File

@@ -32,6 +32,7 @@ export const queryDrafts: QueryDrafts = async function queryDrafts({
req,
sort,
tableName,
version: true,
where: combinedWhere,
})

View File

@@ -6,7 +6,7 @@ import { initPayloadTest } from '../helpers/configHelpers'
import AutosavePosts from './collections/Autosave'
import configPromise from './config'
import AutosaveGlobal from './globals/Autosave'
import { autosaveSlug } from './shared'
import { autosaveSlug, draftSlug } from './shared'
let collectionLocalPostID: string
let collectionLocalVersionID
@@ -200,6 +200,44 @@ describe('Versions', () => {
expect(versions.docs[0].version.title.en).toStrictEqual(newEnglishTitle)
expect(versions.docs[0].version.title.es).toStrictEqual(spanishTitle)
})
it('should query drafts with sort', async () => {
const draftsAscending = await payload.find({
collection: draftSlug,
draft: true,
sort: 'title',
})
const draftsDescending = await payload.find({
collection: draftSlug,
draft: true,
sort: '-title',
})
expect(draftsAscending).toBeDefined()
expect(draftsDescending).toBeDefined()
expect(draftsAscending.docs[0]).toMatchObject(
draftsDescending.docs[draftsDescending.docs.length - 1],
)
})
it('should findVersions with sort', async () => {
const draftsAscending = await payload.findVersions({
collection: draftSlug,
draft: true,
sort: 'createdAt',
})
const draftsDescending = await payload.findVersions({
collection: draftSlug,
draft: true,
sort: '-updatedAt',
})
expect(draftsAscending).toBeDefined()
expect(draftsDescending).toBeDefined()
expect(draftsAscending.docs[0]).toMatchObject(
draftsDescending.docs[draftsDescending.docs.length - 1],
)
})
})
describe('Restore', () => {