add labels in search query

This commit is contained in:
Hongbo Wu 2022-02-23 16:43:07 +08:00
parent edb9339897
commit fc18004a5d
3 changed files with 20 additions and 5 deletions

View file

@ -403,6 +403,7 @@ class UserArticleModel extends DataModel<
inFilter: InFilter
readFilter: ReadFilter
typeFilter: PageType | undefined
labelFilters?: string[]
},
userId: string,
tx = this.kx,
@ -441,6 +442,16 @@ class UserArticleModel extends DataModel<
}
}
// search by labels using lowercase
if (args.labelFilters) {
queryPromise
.innerJoin(Table.LINK_LABELS, 'link_labels.link_id', 'links.id')
.innerJoin(Table.LABELS, 'labels.id', 'link_labels.label_id')
.whereRaw('LOWER(omnivore.labels.name) = ANY(?)', [args.labelFilters])
}
console.log(queryPromise.toString())
if (notNullField) {
queryPromise.whereNotNull(notNullField)
}
@ -469,12 +480,11 @@ class UserArticleModel extends DataModel<
.orderBy('omnivore.links.id', sortOrder)
.limit(limit)
// console.log('query', queryPromise.toString())
const rows = await queryPromise
for (const row of rows) {
this.loader.prime(row.id, row)
}
return [rows, parseInt(totalCount as string)]
}

View file

@ -539,8 +539,8 @@ export const getArticlesResolver = authorized<
const first = params.first || 10
// Perform basic sanitization. Right now we just allow alphanumeric, space and quote
// so queries can contain phrases like "human race". In the future we will need to
// split out terms like "label:unread".
// so queries can contain phrases like "human race";
// We can also split out terms like "label:unread".
const searchQuery = parseSearchQuery(params.query || undefined)
analytics.track({
@ -551,6 +551,7 @@ export const getArticlesResolver = authorized<
inFilter: searchQuery.inFilter,
readFilter: searchQuery.readFilter,
typeFilter: searchQuery.typeFilter,
labelFilters: searchQuery.labelFilters,
env: env.server.apiEnv,
},
})
@ -566,6 +567,7 @@ export const getArticlesResolver = authorized<
inFilter: searchQuery.inFilter,
readFilter: searchQuery.readFilter,
typeFilter: searchQuery.typeFilter,
labelFilters: searchQuery.labelFilters,
},
claims.uid,
tx,

View file

@ -86,7 +86,10 @@ const parseLabelFilters = (
return labelFilters
}
return labelFilters ? labelFilters.concat(str) : [str]
// use lower case for label names
const label = str.toLowerCase()
return labelFilters ? labelFilters.concat(label) : [label]
}
export const parseSearchQuery = (query: string | undefined): SearchFilter => {