Amruth Pillai
Amruth Pillai
Explore posts from servers
PPrisma
Created by Amruth Pillai on 6/27/2024 in #help-and-questions
Accessing extended operations on the prisma client with typescript
I'm trying to make some abstract types around the Prisma Client, like so:
import type { Prisma } from "@prisma/client";
import type { Operation as PrismaOperation } from "@prisma/client/runtime/library";

import type { Database } from "@/libs/database";
import type { FilterDollarSignKeys } from "@/utils/types";

export type Model = keyof Database;

export type Operation = FilterDollarSignKeys<PrismaOperation>;

export type Args<M extends Model, O extends Operation> = Prisma.Args<Database[M], O>;

export type Payload<M extends Model, O extends Operation> = Prisma.Payload<Database[M], O>;

export type Result<M extends Model, O extends Operation, A extends Args<M, O>> = Prisma.Result<
Database[M],
A,
O
>;

// Example Usage:
const model: Model = "user";
const operation: Operation = "findMany";
const _args: Args<typeof model, typeof operation> = { select: { id: true } };
const _result: Result<typeof model, typeof operation, { select: { id: true } }> = [{ id: "1" }];
import type { Prisma } from "@prisma/client";
import type { Operation as PrismaOperation } from "@prisma/client/runtime/library";

import type { Database } from "@/libs/database";
import type { FilterDollarSignKeys } from "@/utils/types";

export type Model = keyof Database;

export type Operation = FilterDollarSignKeys<PrismaOperation>;

export type Args<M extends Model, O extends Operation> = Prisma.Args<Database[M], O>;

export type Payload<M extends Model, O extends Operation> = Prisma.Payload<Database[M], O>;

export type Result<M extends Model, O extends Operation, A extends Args<M, O>> = Prisma.Result<
Database[M],
A,
O
>;

// Example Usage:
const model: Model = "user";
const operation: Operation = "findMany";
const _args: Args<typeof model, typeof operation> = { select: { id: true } };
const _result: Result<typeof model, typeof operation, { select: { id: true } }> = [{ id: "1" }];
But the issue I'm facing is when I try to access any operation that has been extended on the client. For example, I have this prisma-bark-extension on the Prisma Client. When I use prisma.modelName.operation, I see the additional actions provided by the middleware, but import type { Operation } from "@prisma/client/runtime/library"; does not contain a list of them. Would anyone have an idea on how I can get the extended list of operations?
4 replies
DTDrizzle Team
Created by Amruth Pillai on 3/4/2024 in #help
Is there a way to re-use a specific tables columns in multiple queries across an application?
I'm trying to build a bunch of models/queries like this:
const workOrder = await db.query.workOrderTable.findFirst({
columns: {
id: true,
...
},
with: {
user: {
columns: { id: true },
with: { profile: { columns: { name: true, picture: true } } },
},
}
}
const workOrder = await db.query.workOrderTable.findFirst({
columns: {
id: true,
...
},
with: {
user: {
columns: { id: true },
with: { profile: { columns: { name: true, picture: true } } },
},
}
}
const asset = await db.query.assetTable.findFirst({
columns: {
id: true,
...
},
with: {
user: {
columns: { id: true },
with: { profile: { columns: { name: true, picture: true } } },
},
}
}
const asset = await db.query.assetTable.findFirst({
columns: {
id: true,
...
},
with: {
user: {
columns: { id: true },
with: { profile: { columns: { name: true, picture: true } } },
},
}
}
What I want to do is make the user selector reusable across the app so that anyone who queries a specific table, will be able to get the same columns and relationships from the user table, maintaining consistency.
1 replies