Set up sequelize

This commit is contained in:
Jorge Vargas 2024-08-19 00:28:48 -06:00
parent 6833439a4a
commit 87c08df02b
47 changed files with 2171 additions and 6 deletions

View file

@ -0,0 +1,82 @@
import Sequelize from 'sequelize'
const { Op, literal } = Sequelize
import type { Resolvers } from '@/graphql/__generated__/types.generated'
const fuzzySearch = (words: string[]) => `^${words.map(w => `(?=.*\b${w}\b)`)}.+/i`
const resolvers: Resolvers = {
Query: {
searchAlbum: (parent, args, { db }) => {
const { title, categories, limit = 10, offset = 0, order = ['createdAt'], mode = 'DESC', status = ['show'] } = args
const titleWords = title?.split(' ') || []
return db.models.album.findAndCountAll({
limit, offset,
where: {
[Op.or]: [
{ title: { [Op.regexp]: fuzzySearch(titleWords) } },
{ subTitle: { [Op.regexp]: fuzzySearch(titleWords) } }
],
status: { [Op.in]: status }
},
include: categories ? [{ model: db.models.category, where: { name: { [Op.in]: categories } } }] : [],
order: [literal('`album`.`status` = \'coming\' DESC'), ...order.map(o => [o, mode])]
})
},
/* searchAlbumByArtist: async (parent, { name, categories, limit, page = 0, order = ['createdAt'], mode = 'DESC', status = ['show'] }, { db }) => {
const include = [{ model: db.models.artist, where: { name: { [Op.like]: `%${name}%` } } }]
if (categories) include.push({ model: db.models.class, where: { name: { [Op.in]: categories } } })
return searchPage({ limit, page, model: 'album' }, {
where: { status: { [Op.in]: status } },
include,
order: order.map(o => [o, mode])
}, db)
},
searchAnimation: (parent, { title = '', limit, page = 0, order = 'createdAt', mode = 'DESC' }, { db }) => searchPage({ title, limit, page, model: 'animation' }, {
where: { title: { [Op.like]: `%${title}%` } },
order: [[order, mode]]
}, db),
searchStudio: (parent, { name = '', limit, page = 0, order = 'createdAt', mode = 'DESC' }, { db }) => searchPage({ name, limit, page, model: 'studio' }, {
where: { name: { [Op.like]: `%${name}%` } },
order: [[order, mode]]
}, db),
searchGame: (parent, { name = '', limit, page = 0, order = 'createdAt', mode = 'DESC' }, { db }) => searchPage({ name, limit, page, model: 'game' }, {
where: { name: { [Op.like]: `%${name}%` } },
order: [[order, mode]]
}, db),
searchSeries: (parent, { name = '', limit, page = 0, order = 'createdAt', mode = 'DESC' }, { db }) => searchPage({ name, limit, page, model: 'series' }, {
where: { name: { [Op.like]: `%${name}%` } },
order: [[order, mode]]
}, db),
searchSeriesByName: (parent, { name }, { db }) => db.models.series.findAll({
where: {
name: {
[Op.like]: `%${name}%`
}
}
}),
searchPublishersByName: (parent, { name }, { db }) => db.models.publisher.findAll({
where: {
name: {
[Op.like]: `%${name}%`
}
}
}),
searchPlatformsByName: (parent, { name, categories }, { db }) => db.models.platform.findAll({
where: {
name: {
[Op.like]: `%${name}%`
},
type: { [Op.or]: categories }
}
}),
searchPlatformsByCategories: (parent, { categories }, { db }) => categories.length === 0
? []
: db.models.platform.findAll({ where: { type: { [Op.or]: categories } } }) */
}
}
export default resolvers