|
|
|
@ -171,26 +171,51 @@ module.exports = {
|
|
|
|
|
* FETCH TAGS
|
|
|
|
|
*/
|
|
|
|
|
async tags (obj, args, context, info) {
|
|
|
|
|
return WIKI.models.tags.query().orderBy('tag', 'asc')
|
|
|
|
|
const pages = await WIKI.models.pages.query().column([
|
|
|
|
|
'path',
|
|
|
|
|
{ locale: 'localeCode' },
|
|
|
|
|
])
|
|
|
|
|
.withGraphJoined('tags')
|
|
|
|
|
const allTags = _.filter(pages, r => {
|
|
|
|
|
return WIKI.auth.checkAccess(context.req.user, ['read:pages'], {
|
|
|
|
|
path: r.path,
|
|
|
|
|
locale: r.locale
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
.flatMap(r => r.tags)
|
|
|
|
|
return _.orderBy(_.uniqBy(allTags, 'id'), ['tag'], ['asc'])
|
|
|
|
|
},
|
|
|
|
|
/**
|
|
|
|
|
* SEARCH TAGS
|
|
|
|
|
*/
|
|
|
|
|
async searchTags (obj, args, context, info) {
|
|
|
|
|
const query = _.trim(args.query)
|
|
|
|
|
const results = await WIKI.models.tags.query()
|
|
|
|
|
.column('tag')
|
|
|
|
|
.where(builder => {
|
|
|
|
|
builder.andWhere(builderSub => {
|
|
|
|
|
const pages = await WIKI.models.pages.query().column([
|
|
|
|
|
'path',
|
|
|
|
|
{ locale: 'localeCode' },
|
|
|
|
|
])
|
|
|
|
|
.withGraphJoined('tags')
|
|
|
|
|
.modifyGraph('tags', builder => {
|
|
|
|
|
builder.select('tag')
|
|
|
|
|
})
|
|
|
|
|
.modify(queryBuilder => {
|
|
|
|
|
queryBuilder.andWhere(builderSub => {
|
|
|
|
|
if (WIKI.config.db.type === 'postgres') {
|
|
|
|
|
builderSub.where('tag', 'ILIKE', `%${query}%`)
|
|
|
|
|
builderSub.where('tags.tag', 'ILIKE', `%${query}%`)
|
|
|
|
|
} else {
|
|
|
|
|
builderSub.where('tag', 'LIKE', `%${query}%`)
|
|
|
|
|
builderSub.where('tags.tag', 'LIKE', `%${query}%`)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
.limit(5)
|
|
|
|
|
return results.map(r => r.tag)
|
|
|
|
|
const allTags = _.filter(pages, r => {
|
|
|
|
|
return WIKI.auth.checkAccess(context.req.user, ['read:pages'], {
|
|
|
|
|
path: r.path,
|
|
|
|
|
locale: r.locale
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
.flatMap(r => r.tags)
|
|
|
|
|
.map(t => t.tag)
|
|
|
|
|
return _.uniq(allTags).slice(0, 5)
|
|
|
|
|
},
|
|
|
|
|
/**
|
|
|
|
|
* FETCH PAGE TREE
|
|
|
|
|