fix bulk action query limited to 1000 char

This commit is contained in:
Hongbo Wu 2023-12-06 22:06:47 +08:00
parent d42f257f9e
commit ed29721728
2 changed files with 36 additions and 17 deletions

View file

@ -822,8 +822,12 @@ export const bulkActionResolver = authorized<
},
})
// the query size is limited to 255 characters
if (!query || query.length > 255) {
// the query size is limited to 1000 characters
if (!query || query.length > 1000) {
log.error('bulkActionResolver error', {
error: 'QueryTooLong',
query,
})
return { errorCodes: [BulkActionErrorCode.BadRequest] }
}
@ -837,7 +841,16 @@ export const bulkActionResolver = authorized<
labels = await findLabelsByIds(labelIds, uid)
}
await updateLibraryItems(action, query, uid, labels, args)
await updateLibraryItems(
action,
{
query,
useFolders: query.includes('use:folders'),
},
uid,
labels,
args
)
return { success: true }
} catch (error) {

View file

@ -80,11 +80,11 @@ export interface SearchResultItem {
}
export enum SortBy {
SAVED = 'saved_at',
UPDATED = 'updated_at',
PUBLISHED = 'published_at',
READ = 'read_at',
WORDS_COUNT = 'word_count',
SAVED = 'saved',
UPDATED = 'updated',
PUBLISHED = 'published',
READ = 'read',
WORDS_COUNT = 'wordsCount',
}
export enum SortOrder {
@ -102,6 +102,10 @@ interface Select {
alias?: string
}
const paramtersToObject = (parameters: ObjectLiteral[]) => {
return parameters.reduce((a, b) => ({ ...a, ...b }), {})
}
export const sortParamsToSort = (
sortParams: InputMaybe<SortParams> | undefined
) => {
@ -688,7 +692,7 @@ export const searchLibraryItems = async (
// add where clause from query
queryBuilder
.andWhere(query)
.setParameters(parameters.reduce((a, b) => ({ ...a, ...b }), {}))
.setParameters(paramtersToObject(parameters))
}
const count = await queryBuilder.getCount()
@ -1011,7 +1015,7 @@ export const countByCreatedAt = async (
export const updateLibraryItems = async (
action: BulkActionType,
query: string,
searchArgs: SearchArgs,
userId: string,
labels?: Label[],
args?: unknown
@ -1065,19 +1069,21 @@ export const updateLibraryItems = async (
throw new Error('Invalid bulk action')
}
const searchQuery = parseSearchQuery(query)
if (!searchArgs.query) {
throw new Error('Search query is required')
}
const searchQuery = parseSearchQuery(searchArgs.query)
const parameters: ObjectLiteral[] = []
const query = buildQuery(searchQuery, parameters)
await authTrx(async (tx) => {
const queryBuilder = tx
.createQueryBuilder(LibraryItem, 'library_item')
.where('library_item.user_id = :userId', { userId })
const parameters: ObjectLiteral[] = []
const whereClause = buildQuery(searchQuery, parameters)
if (whereClause) {
queryBuilder
.andWhere(whereClause)
.setParameters(parameters.reduce((a, b) => ({ ...a, ...b }), {}))
if (query) {
queryBuilder.andWhere(query).setParameters(paramtersToObject(parameters))
}
if (addLabels) {