'use strict'; const knex = require('./knex'); async function matchTags(rawTags) { const tags = rawTags .concat(rawTags.map(tag => tag.toLowerCase())) .concat(rawTags.map(tag => tag.toUpperCase())); const tagEntries = await knex('tags') .pluck('aliases.id') .whereIn('tags.name', tags) .where(function where() { this .whereNull('tags.alias_for') .orWhereNull('aliases.alias_for'); }) .join('tags as aliases', function join() { this .on('tags.alias_for', 'aliases.id') .orOn('tags.id', 'aliases.id'); }) .groupBy('aliases.id'); return tagEntries; } async function storeTags(release, releaseEntry) { return knex('tags_associated').insert(release.tags.map(tagId => ({ tag_id: tagId, release_id: releaseEntry.id, }))); } module.exports = { matchTags, storeTags, };