76 lines
1.9 KiB
JavaScript
76 lines
1.9 KiB
JavaScript
const dealDB = require("../db/deal.db")
|
||
const commentDB = require("../db/comment.db")
|
||
const prisma = require("../db/client")
|
||
|
||
function assertPositiveInt(v, name = "id") {
|
||
const n = Number(v)
|
||
if (!Number.isInteger(n) || n <= 0) throw new Error(`Geçersiz ${name}.`)
|
||
return n
|
||
}
|
||
|
||
async function getCommentsByDealId(dealId) {
|
||
const id = Number(dealId)
|
||
|
||
const deal = await dealDB.findDeal({ id })
|
||
if (!deal) throw new Error("Deal bulunamadı.")
|
||
|
||
const include = { user: { select: { id:true,username: true, avatarUrl: true } } }
|
||
return commentDB.findComments({ dealId: id }, { include })
|
||
}
|
||
|
||
async function createComment({ dealId, userId, text }) {
|
||
if (!text || typeof text !== "string" || !text.trim())
|
||
throw new Error("Yorum boş olamaz.")
|
||
|
||
const trimmed = text.trim()
|
||
const include = { user: { select: { username: true, avatarUrl: true } } }
|
||
|
||
return prisma.$transaction(async (tx) => {
|
||
const deal = await dealDB.findDeal({ id: dealId }, {}, tx)
|
||
if (!deal) throw new Error("Deal bulunamadı.")
|
||
|
||
const comment = await commentDB.createComment(
|
||
{ text: trimmed, userId, dealId },
|
||
{ include },
|
||
tx
|
||
)
|
||
|
||
await dealDB.updateDeal(
|
||
{ id: dealId },
|
||
{ commentCount: { increment: 1 } },
|
||
{},
|
||
tx
|
||
)
|
||
|
||
return comment
|
||
})
|
||
}
|
||
|
||
async function deleteComment(commentId, userId) {
|
||
const cId = assertPositiveInt(commentId, "commentId")
|
||
const uId = assertPositiveInt(userId, "userId")
|
||
|
||
const comments = await commentDB.findComments(
|
||
{ id: cId },
|
||
{ select: { userId: true } }
|
||
)
|
||
|
||
if (!comments || comments.length === 0) throw new Error("Yorum bulunamadı.")
|
||
if (comments[0].userId !== uId) throw new Error("Bu yorumu silme yetkin yok.")
|
||
|
||
await commentDB.deleteComment({ id: cId })
|
||
return { message: "Yorum silindi." }
|
||
}
|
||
|
||
async function commentChange(length,dealId){
|
||
|
||
|
||
|
||
}
|
||
|
||
module.exports = {
|
||
getCommentsByDealId,
|
||
createComment,
|
||
deleteComment,
|
||
}
|