Reputation: 1109
My custom type "Observations" doesn't seem to be generating correctly as I am getting this error message
Property 'observations' is missing in type 'import("/Users/thomasandrew/Documents/webApps/social-innovate/boilerplate/packages/api/node_modules/.prisma/client/index").ActionPlan' but required in type 'import("/Users/thomasandrew/Documents/webApps/social-innovate/boilerplate/packages/api/src/modules/actionPlan/actionPlan.model").ActionPlan'.ts(2741) actionPlan.model.ts(25, 5): 'observations' is declared here.
This is my Prisma schema file (removed some extraneous fields)
model Observation {
id String @id @default(dbgenerated("gen_random_uuid()"))
actionPlan ActionPlan @relation(fields: [actionPlanId], references: [id])
actionPlanId String
meetingDate DateTime?
place String?
}
model ActionPlan {
id String @id @default(dbgenerated("gen_random_uuid()")) @unique
testName String
observations Observation[]
}
type-graphql model
@ObjectType()
export class ActionPlan extends BaseModel implements Prisma.ActionPlan {
@Field()
testName: string
@Field()
department: string
@Field()
code: string
@Field()
outcome: string
@Field()
hypothesis: string
@Field(type => [Observation])
observations: Observation[]
}
However even when I run prisma generate successfully, it doesn't add the 'observations' to the Action Plan. Am I missing something? Any help would be great. I also attached screenshot of generated types at node_modules/.prisma/client/index.d.ts
Upvotes: 4
Views: 6148
Reputation: 176
Prisma doesn't include relationships in generated types because not all queries include them. Prisma queries do return relationships according options used, but in the generated code this is done through complex TypeScript.
But always you can define types with relationships included manually or using a combination of ReturnType<T>
and Awaited<T>
utilities.
Example defining manually:
type ActionPlanWithObservations = ActionPlan & {
observations: Observation[]
}
Example using Awaited and ReturnType:
type ActionPlanWithObservations =
Awaited<ReturnType<ActionPlanService["getActionPlan"]>>
Where ActionPlanService is:
class ActionPlanService {
getActionPlan(id: string) {
return prisma.actionPlan.findFirst({
where: {
id,
},
include: {
observations: true,
}
})
}
}
Note: Awaited<T>
utility is available since TypeScript 4.5
Upvotes: 3
Reputation: 185
Since you have a relation between those 2, your code should provide an include argument, so that your @Resolver & @Query can populate that entity in the response.
Also, I don't know if it is inside your ActionPlanService
the prisma connection (probably yes, since you get this error).
So, for example, your first query should point to the this ActionPlanService
function:
async getActionPlan(id: string): Promise<ActionPlan> {
return await this.prismaService.actionPlan.findFirst({
where: {
id,
},
include: {
observations: true,
}
});
or something similar, since I don't know how you connect with prisma in that service
Upvotes: 2