This commit is contained in:
1 parent
21a61068fb
commit
60278b9e71
38 files changed
+3452
No files matched your search
@@ -0,0 +1,80 @@
|
||||
import { notFound, redirect } from 'next/navigation'
|
||||
import { canAccess, getAdminContext, PERMS } from '@/lib/permissions'
|
||||
import { prisma } from '@/lib/prisma'
|
||||
import { CfhDetail } from './cfh-detail'
|
||||
|
||||
export default async function CfhDetailPage({ params }: { params: Promise<{ id: string }> }) {
|
||||
const { session, permissions } = await getAdminContext()
|
||||
if (!canAccess(permissions, PERMS.MODERATION_VIEW, session.user.rank)) redirect('/admin')
|
||||
|
||||
const { id } = await params
|
||||
const ticketId = Number(id)
|
||||
if (Number.isNaN(ticketId)) notFound()
|
||||
|
||||
const ticket = await prisma.supportTickets.findUnique({ where: { id: ticketId } })
|
||||
if (!ticket) notFound()
|
||||
|
||||
const canEdit = canAccess(permissions, PERMS.MODERATION_EDIT, session.user.rank)
|
||||
|
||||
// Fetch sender, reported, mod info
|
||||
const userIds = [ticket.senderId, ticket.reportedId, ticket.modId].filter(Boolean)
|
||||
const users =
|
||||
userIds.length > 0
|
||||
? await prisma.user.findMany({
|
||||
where: { id: { in: userIds } },
|
||||
select: {
|
||||
id: true,
|
||||
username: true,
|
||||
look: true,
|
||||
rank: true,
|
||||
online: true,
|
||||
ipRegister: true,
|
||||
mail: true,
|
||||
},
|
||||
})
|
||||
: []
|
||||
const userMap = Object.fromEntries(users.map((u) => [u.id, u]))
|
||||
|
||||
// Get ban/mute history for reported user
|
||||
const reportedId = ticket.reportedId
|
||||
const [banCount, recentBans] = reportedId
|
||||
? await Promise.all([
|
||||
prisma.ban.count({ where: { userId: reportedId } }),
|
||||
prisma.ban.findMany({
|
||||
where: { userId: reportedId },
|
||||
orderBy: { id: 'desc' },
|
||||
take: 5,
|
||||
}),
|
||||
])
|
||||
: [0, []]
|
||||
|
||||
return (
|
||||
<CfhDetail
|
||||
ticket={{
|
||||
id: ticket.id,
|
||||
state: ticket.state,
|
||||
type: ticket.type,
|
||||
timestamp: ticket.timestamp,
|
||||
issue: ticket.issue,
|
||||
roomId: ticket.roomId,
|
||||
category: ticket.category,
|
||||
score: ticket.score,
|
||||
}}
|
||||
sender={userMap[ticket.senderId] ?? null}
|
||||
reported={userMap[ticket.reportedId] ?? null}
|
||||
moderator={userMap[ticket.modId] ?? null}
|
||||
banHistory={{
|
||||
count: banCount,
|
||||
recent: recentBans.map((b) => ({
|
||||
id: b.id,
|
||||
reason: b.banReason,
|
||||
type: b.type,
|
||||
staff: `Staff #${b.userStaffId}`,
|
||||
timestamp: b.timestamp,
|
||||
})),
|
||||
}}
|
||||
canEdit={canEdit}
|
||||
currentUserId={session.user.id}
|
||||
/>
|
||||
)
|
||||
}
|
||||
Reference in new issue
Block a user