// services/user.service.js const userDB = require("../db/user.db") const dealDB = require("../db/deal.db") const commentDB = require("../db/comment.db") const dealService = require("./deal.service") async function getUserProfileByUsername(userName) { const username = String(userName).trim() if (!username) throw new Error("username zorunlu") const user = await userDB.findUser( { username }, { select: { id: true, username: true, email: true, avatarUrl: true, createdAt: true } } ) if (!user) { const err = new Error("Kullanıcı bulunamadı.") err.statusCode = 404 throw err } const [dealAgg, totalComments, comments] = await Promise.all([ dealDB.aggregateDeals({ userId: user.id }), commentDB.countComments({ userId: user.id }), commentDB.findComments( { userId: user.id }, { orderBy: { createdAt: "desc" }, take: 20, include: { user: { select: { id: true, username: true, avatarUrl: true } }, deal: { select: { id: true, title: true } }, }, } ), ]) const userDeals = await dealService.getDeals({ preset: "USER_PUBLIC", targetUserId: user.id, viewer: null, page: 1, limit: 20, }) const totalDeals = dealAgg?._count?._all ?? 0 const stats = { totalLikes: dealAgg?._sum?.score ?? 0, totalComments: totalComments ?? 0, totalShares: totalDeals, totalDeals, } return { user, stats, deals: userDeals.results, comments } } module.exports = { getUserProfileByUsername }