mirror of
https://github.com/jorgev259/soc_site-astro.git
synced 2025-06-29 07:57:41 +00:00
98 lines
3.4 KiB
TypeScript
98 lines
3.4 KiB
TypeScript
import prismaClient from 'prisma/client'
|
|
|
|
import type { Resolvers } from '@/graphql/__generated__/types.generated'
|
|
|
|
const resolvers: Resolvers = {
|
|
Query: {
|
|
searchAlbum: async (_, args, context, info) => {
|
|
const {
|
|
title,
|
|
categories,
|
|
limit = 10,
|
|
offset = 0,
|
|
order = ['createdAt'],
|
|
mode = 'DESC',
|
|
status = ['show']
|
|
} = args
|
|
const fuzzyCondition = title
|
|
? {
|
|
OR: [
|
|
{ title: { search: title.toLowerCase().split(' ').join(' & ') } },
|
|
{ subTitle: { search: title.toLowerCase().split(' ').join(' & ') } }
|
|
]
|
|
}
|
|
: {}
|
|
|
|
const result = prismaClient.albums.findMany({
|
|
take: limit,
|
|
skip: offset,
|
|
where: {
|
|
AND: {
|
|
...fuzzyCondition,
|
|
// category condition
|
|
status: { in: status }
|
|
}
|
|
},
|
|
include: { Album_Category: !!categories },
|
|
orderBy: [...order.map((o) => ({ [o]: mode.toLowerCase() }))]
|
|
// order: [literal("`album`.`status` = 'coming' DESC")]
|
|
})
|
|
|
|
return result
|
|
}
|
|
/* 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
|