View: Move search code into separate Util module
This commit is contained in:
58
util/search.js
Normal file
58
util/search.js
Normal file
@@ -0,0 +1,58 @@
|
||||
const Sequelize = require('sequelize');
|
||||
const { Card, Character, User } = require('../models');
|
||||
const { QUALITY_NAMES } = require('../config/constants');
|
||||
|
||||
module.exports = {
|
||||
name: "SearchUtils",
|
||||
findByName: async function(model, search, lim=10) {
|
||||
let results = []
|
||||
let choices = [];
|
||||
const rows = await model.findAll({
|
||||
where: {
|
||||
name: {
|
||||
[Sequelize.Op.like]: `%${search}%`
|
||||
}
|
||||
},
|
||||
limit: lim
|
||||
});
|
||||
for (let i = 0; i < rows.length; i++) {
|
||||
choices.push({
|
||||
name: rows[i].name,
|
||||
value: `${rows[i].id}`
|
||||
});
|
||||
}
|
||||
results["rows"] = rows;
|
||||
results["choices"] = choices;
|
||||
return results;
|
||||
},
|
||||
|
||||
findCards: async function(focusedOption, options={}) {
|
||||
let choices = [];
|
||||
let condition = {
|
||||
where: {
|
||||
[Sequelize.Op.or]: [
|
||||
{identifier: { [Sequelize.Op.like]: `%${focusedOption.value}%` }},
|
||||
{'$Character.name$': { [Sequelize.Op.like]: `%${focusedOption.value}%` }}
|
||||
],
|
||||
burned: false
|
||||
},
|
||||
include: [{ model: Character }, { model: User }],
|
||||
limit: 10
|
||||
}
|
||||
if (options.ownedOnly) {
|
||||
condition.where.userId = { [Sequelize.Op.eq]: options.user.id };
|
||||
}
|
||||
const cards = await Card.findAll(condition);
|
||||
for (let i = 0; i < cards.length; i++) {
|
||||
let owned = "";
|
||||
if (options.user) {
|
||||
owned = cards[i].userId === options.user.id ? " (owned)" : "";
|
||||
}
|
||||
choices.push({
|
||||
name: `${cards[i].identifier} - ${cards[i].Character.name} (${QUALITY_NAMES[cards[i].quality]})${owned}`,
|
||||
value: cards[i].identifier
|
||||
});
|
||||
}
|
||||
return { "rows": cards, "choices": choices };
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user