feat(admin): ban appeals, photos polish, economy adjust, staff smoke
Co-authored-by: Cursor <[email protected]>
This commit is contained in:
1 parent
fe46bd0544
commit
3ad3f9512c
36 files changed
+1185
-293
No files matched your search
@@ -3,6 +3,7 @@ import { getTranslations } from "next-intl/server";
|
||||
import { TicketQueueBanner } from "@/components/admin/ticket-queue-banner";
|
||||
import { getMinStaffRank } from "@/lib/admin/min-staff-rank";
|
||||
import { positiveBigInt } from "@/lib/api";
|
||||
import { activeBanWhere } from "@/lib/bans";
|
||||
import { canAccess, getAdminContext, PERMS } from "@/lib/permissions";
|
||||
import { prisma } from "@/lib/prisma";
|
||||
import { AdminHelpTicketDetail } from "./admin-help-ticket-detail";
|
||||
@@ -29,6 +30,7 @@ export default async function AdminHelpTicketDetailPage({
|
||||
select: {
|
||||
id: true,
|
||||
userId: true,
|
||||
categoryId: true,
|
||||
title: true,
|
||||
content: true,
|
||||
open: true,
|
||||
@@ -57,9 +59,9 @@ export default async function AdminHelpTicketDetailPage({
|
||||
]),
|
||||
];
|
||||
|
||||
const users =
|
||||
const [users, category, activeBan] = await Promise.all([
|
||||
authorIds.length > 0
|
||||
? await prisma.user.findMany({
|
||||
? prisma.user.findMany({
|
||||
where: { id: { in: authorIds } },
|
||||
select: {
|
||||
id: true,
|
||||
@@ -68,7 +70,20 @@ export default async function AdminHelpTicketDetailPage({
|
||||
mail: true,
|
||||
},
|
||||
})
|
||||
: [];
|
||||
: Promise.resolve([]),
|
||||
ticket.categoryId != null
|
||||
? prisma.websiteHelpCenterCategories.findUnique({
|
||||
where: { id: ticket.categoryId },
|
||||
select: { name: true },
|
||||
})
|
||||
: Promise.resolve(null),
|
||||
ticket.userId != null
|
||||
? prisma.ban.findFirst({
|
||||
where: { userId: ticket.userId, ...activeBanWhere() },
|
||||
select: { id: true },
|
||||
})
|
||||
: Promise.resolve(null),
|
||||
]);
|
||||
|
||||
const userById = new Map(users.map((u) => [u.id, u]));
|
||||
const openerId = ticket.userId;
|
||||
@@ -104,6 +119,10 @@ export default async function AdminHelpTicketDetailPage({
|
||||
const creator = openerId != null ? userById.get(openerId) : undefined;
|
||||
|
||||
const canEdit = canAccess(permissions, PERMS.TICKETS_EDIT, session.user.rank);
|
||||
const canLiftBan = canAccess(permissions, PERMS.USERS_BAN, session.user.rank);
|
||||
const isBanAppeal =
|
||||
/ban\s*appeal/i.test(ticket.title) ||
|
||||
/ban\s*appeal/i.test(category?.name ?? "");
|
||||
|
||||
return (
|
||||
<div className="space-y-6">
|
||||
@@ -119,6 +138,7 @@ export default async function AdminHelpTicketDetailPage({
|
||||
open: ticket.open,
|
||||
createdAt: (ticket.createdAt ?? new Date()).toISOString(),
|
||||
updatedAt: (ticket.updatedAt ?? new Date()).toISOString(),
|
||||
categoryName: category?.name ?? (isBanAppeal ? "Ban appeal" : null),
|
||||
creator: creator
|
||||
? {
|
||||
id: creator.id,
|
||||
@@ -130,6 +150,8 @@ export default async function AdminHelpTicketDetailPage({
|
||||
}}
|
||||
messages={messages}
|
||||
canEdit={canEdit}
|
||||
canLiftBan={canLiftBan}
|
||||
hasActiveBan={!!activeBan}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
|
||||
Reference in new issue
Block a user