prisma-extension-casl
Version:
Enforce casl abilities on prisma client
33 lines (31 loc) • 1.28 kB
text/typescript
import { relationFieldsByModel } from "./helpers"
export function transformDataToWhereQuery(args: any, model: string) {
;['connect', 'disconnect'].forEach((action) => {
Object.entries(args.data).forEach(([relation, obj]: [string, any]) => {
if (typeof obj === 'object' && !Array.isArray(obj) && obj[action]) {
// combine args.data.relation[action].AND and args.where.AND
const ANDArgs = { AND: [...(obj[action].AND ?? []), ...(args.where[relation]?.AND ?? [])] }
const relationTo = relationFieldsByModel[model][relation].relationToFields?.[0]
const relationFrom = relationFieldsByModel[model][relation].relationFromFields?.[0]
if (!relationTo || !relationFrom) {
throw new Error('Cannot find correct relations to transform updateMany to casl query.')
}
args.where = {
...(args.where ?? {}),
[]: {
...(args.where[relation] ?? {}),
...obj[action],
...(ANDArgs.AND.length > 0 ? ANDArgs : {})
}
}
args.data = {
...args.data,
[]: obj[action][relationTo]
}
delete args.data[relation]
delete args.where[relation][relationTo]
}
})
})
return args
}