Wartungsmodus funktional #9

This commit is contained in:
nocnico
2025-07-03 21:23:37 +02:00
parent 84d326ddf5
commit 44d51cd1a8
4 changed files with 98 additions and 12 deletions

View File

@@ -8,16 +8,35 @@ import { Settings } from "_components/navbar/Settings";
import ModeSwitchDropdown from "_components/navbar/ModeSwitchDropdown";
import AdminPanel from "_components/navbar/AdminPanel";
import { getServerSession } from "api/auth/[...nextauth]/auth";
import { prisma } from "@repo/db";
export default async function Navbar() {
const session = await getServerSession();
const latestNotam = await prisma.notam.findFirst({
orderBy: { createdAt: "desc" },
});
let wartungsarbeiten = false;
if (
latestNotam &&
latestNotam.wartungsmodus &&
latestNotam.active &&
((latestNotam.showUntilActive && new Date(latestNotam.showUntil) > new Date()) ||
!latestNotam.showUntilActive)
) {
wartungsarbeiten = true;
}
return (
<div className="navbar bg-base-100 shadow-sm flex gap-5 justify-between">
<div className="flex items-center gap-2">
<ModeSwitchDropdown />
{session?.user.permissions.includes("ADMIN_KICK") && <AdminPanel />}
</div>
{wartungsarbeiten && (
<p className="alert alert-error shadow-lg font-bold">Wartungsmodus aktiv!</p>
)}
<div className="flex items-center gap-5">
<div className="flex items-center gap-2">
<Audio />

View File

@@ -5,6 +5,7 @@ import { NextAuthSessionProvider } from "./_components/AuthSessionProvider";
import { getServerSession } from "./api/auth/[...nextauth]/auth";
import { Toaster } from "react-hot-toast";
import { QueryProvider } from "_components/QueryProvider";
import { prisma } from "@repo/db";
import { Error as ErrorComp } from "_components/Error";
const geistSans = localFont({
@@ -27,6 +28,22 @@ export default async function RootLayout({
children: React.ReactNode;
}>) {
const session = await getServerSession();
const latestNotam = await prisma.notam.findFirst({
orderBy: { createdAt: "desc" },
});
let wartungsarbeiten = false;
if (
latestNotam &&
latestNotam.wartungsmodus &&
latestNotam.active &&
((latestNotam.showUntilActive && new Date(latestNotam.showUntil) > new Date()) ||
!latestNotam.showUntilActive)
) {
wartungsarbeiten = true;
}
return (
<html lang="de" data-theme="dark">
<body
@@ -53,7 +70,20 @@ export default async function RootLayout({
{session?.user.isBanned && (
<ErrorComp title="You are banned from using this service" statusCode={403} />
)}
{!session?.user.isBanned && children}
{!session?.user.isBanned &&
wartungsarbeiten &&
!session?.user.permissions.includes("ADMIN_MESSAGE") && (
<ErrorComp
title={
latestNotam?.message ||
"Wir führen aktuell Wartungsarbeiten am System durch, versuche es später erneut."
}
statusCode={503}
/>
)}
{!session?.user.isBanned &&
(!wartungsarbeiten || session?.user.permissions.includes("ADMIN_MESSAGE")) &&
children}
</NextAuthSessionProvider>
</QueryProvider>
</body>