import { useToString } from '@vueuse/core' import { take } from 'echarts/types/src/component/helper/interactionMutex.js' export default defineEventHandler(async (event) => { const query = getQuery(event) const name = useToString(query.name).value.split(' ') function pipelineFilter(keywords) { var result = [{}] keywords.forEach((keyword, index) => { result[index] = { $match: { $or: [ { 'name.family': { $regex: (index === 0 ? '^' : '') + keyword, $options: 'i', }, }, { 'name.given': { $regex: (index === 0 ? '^' : '') + keyword, $options: 'i', }, }, ], }, } }) return result } try { if (Object.keys(query).length === 0) { return await prisma.practitioner.aggregateRaw({ pipeline: [{ $limit: 100 }], }) } const practitioners = await prisma.practitioner.aggregateRaw({ pipeline: [ // { $unwind: { path: '$name.family' } }, ...pipelineFilter(name), { $limit: 10, }, // { // $project: { // id: 1, // name: 1, // }, // }, ], }) return practitioners } catch (error) { return { status: 500, body: { messages: 'failed to fetch practitioners', code: error, }, } } })