From b95319d61e708d6a6649de9950c32ce25ddfb949 Mon Sep 17 00:00:00 2001 From: PxlLoewe <72106766+PxlLoewe@users.noreply.github.com> Date: Wed, 25 Jun 2025 18:07:05 -0700 Subject: [PATCH] =?UTF-8?q?Einstellungen=20sind=20eingeschr=C3=A4nkt=20wen?= =?UTF-8?q?n=20Nutzer=20gebannt=20ist?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/user/[id]/_components/forms.tsx | 26 ++- apps/hub/app/(app)/admin/user/action.ts | 9 +- .../app/(app)/settings/_components/forms.tsx | 182 ++++++++++++------ apps/hub/app/(app)/settings/page.tsx | 35 +++- .../app/(auth)/email-verification/page.tsx | 4 +- packages/database/prisma/schema/user.prisma | 3 +- 6 files changed, 191 insertions(+), 68 deletions(-) diff --git a/apps/hub/app/(app)/admin/user/[id]/_components/forms.tsx b/apps/hub/app/(app)/admin/user/[id]/_components/forms.tsx index bd4fa41a..6ed6d9b7 100644 --- a/apps/hub/app/(app)/admin/user/[id]/_components/forms.tsx +++ b/apps/hub/app/(app)/admin/user/[id]/_components/forms.tsx @@ -14,7 +14,13 @@ import { } from "@repo/db"; import { useRef, useState } from "react"; import { useForm } from "react-hook-form"; -import { deleteDispoHistory, deletePilotHistory, editUser, resetPassword } from "../../action"; +import { + deleteDispoHistory, + deletePilotHistory, + deleteUser, + editUser, + resetPassword, +} from "../../action"; import { toast } from "react-hot-toast"; import { PersonIcon, @@ -41,6 +47,7 @@ import { PlaneIcon, RedoDot, Timer, + Trash2, X, } from "lucide-react"; import Link from "next/link"; @@ -475,6 +482,7 @@ export const AdminForm = ({ discordAccount, }: AdminFormProps) => { const router = useRouter(); + const { data: session } = useSession(); return (
@@ -502,6 +510,22 @@ export const AdminForm = ({ > Passwort zurücksetzen + {session?.user.permissions.includes("ADMIN_USER_ADVANCED") && ( +
+ +
+ )} {user.isBanned && ( +
+ )} + + ); +}; + export const PasswordForm = (): React.JSX.Element => { const schema = z.object({ password: z.string().min(2).max(30), diff --git a/apps/hub/app/(app)/settings/page.tsx b/apps/hub/app/(app)/settings/page.tsx index 5d655a36..462e96a5 100644 --- a/apps/hub/app/(app)/settings/page.tsx +++ b/apps/hub/app/(app)/settings/page.tsx @@ -1,20 +1,44 @@ import { prisma } from "@repo/db"; import { getServerSession } from "../../api/auth/[...nextauth]/auth"; -import { ProfileForm, SocialForm, PasswordForm, PilotForm } from "./_components/forms"; +import { ProfileForm, SocialForm, PasswordForm, PilotForm, DeleteForm } from "./_components/forms"; import { GearIcon } from "@radix-ui/react-icons"; +import { Error } from "_components/Error"; export default async function Page() { const session = await getServerSession(); - if (!session) return null; + if (!session) + return ; const user = await prisma.user.findFirst({ where: { id: session.user.id, + Penaltys: { + some: { + until: { + gte: new Date(), + }, + suspended: false, + }, + }, }, include: { discordAccounts: true, + Penaltys: true, }, }); - if (!user) return null; + const userPenaltys = await prisma.penalty.findMany({ + where: { + userId: session.user.id, + until: { + gte: new Date(), + }, + type: { + in: ["TIME_BAN", "BAN"], + }, + + suspended: false, + }, + }); + if (!user) return ; const discordAccount = user?.discordAccounts[0]; return (
@@ -24,7 +48,7 @@ export default async function Page() {

- +
@@ -35,6 +59,9 @@ export default async function Page() {
+
+ +
); } diff --git a/apps/hub/app/(auth)/email-verification/page.tsx b/apps/hub/app/(auth)/email-verification/page.tsx index fc2dc825..a478e812 100644 --- a/apps/hub/app/(auth)/email-verification/page.tsx +++ b/apps/hub/app/(auth)/email-verification/page.tsx @@ -1,5 +1,5 @@ "use client"; -import { CheckEmailCode } from "(app)/admin/user/action"; +import { checkEmailCode } from "(app)/admin/user/action"; import { Check } from "lucide-react"; import { useRouter, useSearchParams } from "next/navigation"; import { useCallback, useEffect, useState } from "react"; @@ -15,7 +15,7 @@ export default function Page() { async (code: string) => { console.log("Verifying code:", code); if (!code) return; - const res = await CheckEmailCode(code); + const res = await checkEmailCode(code); console.log("Verification response:", res); if (res.error) { console.log("Verification error:", res.error); diff --git a/packages/database/prisma/schema/user.prisma b/packages/database/prisma/schema/user.prisma index 6ccff52c..9d55a584 100644 --- a/packages/database/prisma/schema/user.prisma +++ b/packages/database/prisma/schema/user.prisma @@ -11,6 +11,7 @@ enum BADGES { enum PERMISSION { ADMIN_EVENT ADMIN_USER + ADMIN_USER_ADVANCED AUDIO_ADMIN ADMIN_STATION ADMIN_KEYWORD @@ -66,7 +67,7 @@ model User { ConnectedDispatcher ConnectedDispatcher[] ConnectedAircraft ConnectedAircraft[] PositionLog PositionLog[] - Penalty Penalty[] + Penaltys Penalty[] CreatedPenalties Penalty[] @relation("CreatedPenalties") @@map(name: "users")