#node.js #postgresql #nestjs #prisma
Вопрос:
Я пытаюсь обновить свою базу данных Postgres с помощью Prisma ORM в NestJS (архитектура микросервисов). Код позволяет пользователям взаимодействовать с запросами на приглашение. Но я продолжаю получать ошибку: Argument of type 'Invitation' is not assignable to parameter of type 'Invitation amp; { work: Work; }'. Property 'work' is missing in type 'Invitation' but required in type '{ work: Work; }'
.
Полное сообщение об ошибке выглядит следующим образом:
Type '{ status: "PENDING" | "ACCEPTED" | "REJECTED"; work: undefined; id: string; workId: string; coId?: string; createdAt: Date; respondedAt?: Date; owner?: string; note?: string; }' is not assignable to type '(Without<InvitationUpdateInput, InvitationUncheckedUpdateInput> amp; InvitationUncheckedUpdateInput) | (Without<...> amp; InvitationUpdateInput)'.
Type '{ status: "PENDING" | "ACCEPTED" | "REJECTED"; work: undefined; id: string; workId: string; coId?: string; createdAt: Date; respondedAt?: Date; owner?: string; note?: string; }' is not assignable to type 'Without<InvitationUncheckedUpdateInput, InvitationUpdateInput> amp; InvitationUpdateInput'.
Type '{ status: "PENDING" | "ACCEPTED" | "REJECTED"; work: undefined; id: string; workId: string; coId?: string; createdAt: Date; respondedAt?: Date; owner?: string; note?: string; }' is not assignable to type 'Without<InvitationUncheckedUpdateInput, InvitationUpdateInput>'. Types of property 'workId' are incompatible. Type 'string' is not assignable to type 'never'.
Как я могу это исправить?
Заранее спасибо!
Интерфейс Приглашения:
export default class Invitation {
id: string;
workId: string;
work: string;
co?: string;
status: RequestStatus;
createdAt: Date;
respondedAt?: Date;
owner?: string;
note?: string;
}
export enum RequestStatus {
PENDING = 'PENDING',
REJECTED = 'REJECTED',
ACCEPTED = 'ACCEPTED',
}
Схема приглашения prisma:
model Invitation {
id String @id @db.Uuid
workId String @db.Uuid
work Work @relation(...)
status RequestStatus
co String @db.Uuid
owner String
note String
createdAt DateTime
respondedAt DateTime
}
Механизм обновления в инфраструктуре сохраняемости Postgres:
async update(invitation: Invitation): Promise<Invitation> {
const entity = await this.prismaService.invitation.update({
where: {
id: invitation.id,
},
data: {
...invitation,
status: RequestStatusEntity[invitation.status],
work: undefined,
},
include: {
work: true,
},
});
return this.toDomain(entity);
}
private toDomain(
entity: InvitationEntity amp; {
work: WorkEntity;
},
): Invitation {
return Object.setPrototypeOf(
{
...entity,
status: RequestStatus[entity.status],
},
Invitation.prototype,
);
}
Комментарии:
1. Каково определение модели работы в вашем файле schema.prisma?
Ответ №1:
В этом случае вы не можете использовать перечисления машинописного текста, так как Prisma использует строковые литералы в сгенерированном типе.
Я бы предложил использовать типы Prisma напрямую, а не создавать свои собственные, как это:
import { RequestStatus } from '@prisma/client'
export default class Invitation {
id: string;
workId: string;
work: string;
co?: string;
status: RequestStatus;
createdAt: Date;
respondedAt?: Date;
owner?: string;
note?: string;
}