HotTRDealsBackend/db/commentLike.db.js
2026-01-29 00:45:52 +00:00

62 lines
1.7 KiB
JavaScript

const prisma = require("./client")
async function findLike(commentId, userId, db) {
const p = db || prisma
return p.commentLike.findUnique({
where: { commentId_userId: { commentId, userId } },
})
}
async function findLikesByUserAndCommentIds(userId, commentIds, db) {
const p = db || prisma
return p.commentLike.findMany({
where: { userId, commentId: { in: commentIds } },
select: { commentId: true },
})
}
async function setCommentLike({ commentId, userId, like }) {
return prisma.$transaction(async (tx) => {
const comment = await tx.comment.findUnique({
where: { id: commentId },
select: { id: true, likeCount: true },
})
if (!comment) throw new Error("Yorum bulunamadı.")
const existing = await findLike(commentId, userId, tx)
if (like) {
if (existing) {
return { liked: true, delta: 0, likeCount: comment.likeCount }
}
await tx.commentLike.create({
data: { commentId, userId },
})
const updated = await tx.comment.update({
where: { id: commentId },
data: { likeCount: { increment: 1 } },
select: { likeCount: true },
})
return { liked: true, delta: 1, likeCount: updated.likeCount }
}
if (!existing) {
return { liked: false, delta: 0, likeCount: comment.likeCount }
}
await tx.commentLike.delete({
where: { commentId_userId: { commentId, userId } },
})
const updated = await tx.comment.update({
where: { id: commentId },
data: { likeCount: { decrement: 1 } },
select: { likeCount: true },
})
return { liked: false, delta: -1, likeCount: updated.likeCount }
})
}
module.exports = {
findLikesByUserAndCommentIds,
setCommentLike,
}