TS x Prismaでts(2322)エラー
1分目次
Prismaでupdateをしたくてそのレコードの特定にwhereを使ってたらTS2322エラー。
型 '{ userId: string; tweetId: string; }' を型 'LikeWhereUniqueInput' に割り当てることはできません。
オブジェクト リテラルは既知のプロパティのみ指定できます。'userId' は型 'LikeWhereUniqueInput' に存在しません。ts(2322)
解決方法
controllers/like/index.ts
// 問題箇所 抜粋
await prisma.like.update({
where: {
userId: userId,
tweetId: tweetId,
},
data: {
level: level
}
});
likeにはlevelをつけておりそれをupdateしたかった。ユーザーによる特定ツイートへのlikeは1回までなのでuserIdとtweetIdで特定してlevelを更新しようと思ってたけど、よくよく考えたら自分はuserId, tweetIdの組み合わせが全く同じものは一つしかないと分かってるけどコンピュータ側はわかってないんだった。
prisma.shcemaで@unique
指定したものや主キーなどでないとこうなる、と思う。
設計上主キーよりuserId, tweetIdの取得のほうが効率的なのでそうしようと思ったのが裏目に出た。
controllers/like/index.ts
// 問題箇所 抜粋
await prisma.like.update({
where: {
id: id, // 主キー使うことにしたら解決
},
data: {
level: level
}
});