When posting a query i want to retreive only the data that is assigned to the current user (id).
I retreive and set the userId
with a middleware function that contains;
const userId = tokenPayload['claims']['uid'];
ctx.userId = userId;
Base on the userId
i need to filter the data from models like this;
model Address {
id String @id @default(uuid())
name string
...
user User
}
so i want to return the equivalent to Addresses.filter(address => address.user.id === ctx.userId)
(the Addresses
where the user.id
is equal to the one set in the middleware)
for example something like this (this is made-up code so it doenst work)
plugins: [nexusPrismaPlugin(
{
computedInputs: {
...
},
computedFilters: {
addresses: ({ ctx }) => ({ where: { user: { id: ctx.userId } } }),
relations: ({ ctx }) => ({ where: { user: { id: ctx.userId } } }),
...
}
}
)],
Where the computedFilters
filters the incoming query to match the requirements that are set in the where
statement.
So with this set it should only return the adresses
and / or relations
where user.id === ctx.userId
.
I hope it is clear what i want to achieve, it doensn't have to be like this, the only thing that needs to be the same is the response in the most performant way.
I hope someone can help, i'm struggeling with the current issue for the last couple of weeks..
I resolved the issue by editing the generated resolvers;
by replacing
t.crud.addresses({filtering: true, ordering: true});
with
t.list.field('addresses', {
type: 'Address',
resolve: (_parent, _args, ctx) => {
return ctx.prisma.address.findMany({
where: {
user: {
id: ctx.userId
}
}
})
}
});