2019-03-24 00:29:22 +00:00
|
|
|
'use strict';
|
|
|
|
|
2019-03-25 02:57:33 +00:00
|
|
|
const knex = require('./knex');
|
|
|
|
|
|
|
|
async function matchTags(rawTags) {
|
2019-04-07 03:01:06 +00:00
|
|
|
const tagQuery = knex('tags')
|
2019-03-25 02:57:33 +00:00
|
|
|
.select(knex.raw('ifnull(original.tag, tags.tag) as tag'), knex.raw('ifnull(original.tag, tags.tag) as tag'))
|
2019-04-04 02:00:28 +00:00
|
|
|
.whereIn('tags.tag', rawTags)
|
2019-04-07 03:01:06 +00:00
|
|
|
.leftJoin('tags as original', 'tags.alias_for', 'original.tag')
|
|
|
|
.toString()
|
|
|
|
.replace('where `tags`.`tag` in', 'where `tags`.`tag` collate NOCASE in');
|
|
|
|
|
|
|
|
const tagEntries = await knex.raw(tagQuery);
|
2019-03-25 02:57:33 +00:00
|
|
|
|
2019-04-04 02:44:37 +00:00
|
|
|
return Array.from(new Set(tagEntries.map(({ tag }) => tag))).sort(); // reduce to tag name and filter duplicates
|
2019-03-25 02:57:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = { matchTags };
|