From a9d20e018de0acbf94f84208814b40553db7c25b Mon Sep 17 00:00:00 2001 From: PxlLoewe <72106766+PxlLoewe@users.noreply.github.com> Date: Sun, 6 Jul 2025 00:36:48 -0700 Subject: [PATCH] #45 --- apps/dispatch-server/routes/mission.ts | 16 +++++++++++++-- .../_components/pannel/MissionForm.tsx | 6 ++++-- .../app/_components/navbar/PageAlert.tsx | 2 +- apps/dispatch/app/layout.tsx | 2 +- .../admin/config/_components/MessageForm.tsx | 7 +++---- apps/hub/app/(app)/admin/config/action.tsx | 6 +++--- apps/hub/app/(app)/admin/config/page.tsx | 6 +++--- apps/hub/app/_components/ui/PageAlert.tsx | 2 +- apps/hub/app/api/config/route.ts | 19 ++++++++++++++++++ apps/hub/app/layout.tsx | 2 +- .../schema/{notam.prisma => config.prisma} | 2 +- .../migration.sql | 1 + .../migration.sql | 20 +++++++++++++++++++ 13 files changed, 72 insertions(+), 19 deletions(-) create mode 100644 apps/hub/app/api/config/route.ts rename packages/database/prisma/schema/{notam.prisma => config.prisma} (96%) create mode 100644 packages/database/prisma/schema/migrations/20250705185213_rename_notam_to_config/migration.sql create mode 100644 packages/database/prisma/schema/migrations/20250705185304_rename_notam_to_config/migration.sql diff --git a/apps/dispatch-server/routes/mission.ts b/apps/dispatch-server/routes/mission.ts index b5a65a97..acb5c6f0 100644 --- a/apps/dispatch-server/routes/mission.ts +++ b/apps/dispatch-server/routes/mission.ts @@ -282,8 +282,20 @@ router.post("/:id/hpg-validation-result", async (req, res) => { router.post("/:id/validate-hpg", async (req, res) => { try { + const config = await prisma.config.findFirst({ + orderBy: { + createdAt: "desc", + }, + }); + if (config?.disableHPG) { + res.status(400).json({ + error: "HPG is disabled", + }); + return; + } + const { id } = req.params; - const config = req.body as + const body = req.body as | { alertWhenValid?: boolean; } @@ -336,7 +348,7 @@ router.post("/:id/validate-hpg", async (req, res) => { io.to(`desktop:${activeAircraftinMission?.userId}`).emit("hpg-validation", { missionId: parseInt(id), userId: req.user?.id, - alertWhenValid: config?.alertWhenValid || false, + alertWhenValid: body?.alertWhenValid || false, }); } catch (error) { console.error(error); diff --git a/apps/dispatch/app/(app)/dispatch/_components/pannel/MissionForm.tsx b/apps/dispatch/app/(app)/dispatch/_components/pannel/MissionForm.tsx index 312be934..fd6c2a17 100644 --- a/apps/dispatch/app/(app)/dispatch/_components/pannel/MissionForm.tsx +++ b/apps/dispatch/app/(app)/dispatch/_components/pannel/MissionForm.tsx @@ -438,10 +438,12 @@ export const MissionForm = () => { } catch (error) { if (error instanceof AxiosError) { toast.error( - `Fehler beim Erstellen des Einsatzes: ${error.response?.data.error}`, + `Fehler beim Bearbeiten des Einsatzes: ${error.response?.data.error}`, ); } else { - toast.error(`Fehler beim Erstellen des Einsatzes: ${(error as Error).message}`); + toast.error( + `Fehler beim Bearbeiten des Einsatzes: ${(error as Error).message}`, + ); } } })} diff --git a/apps/dispatch/app/_components/navbar/PageAlert.tsx b/apps/dispatch/app/_components/navbar/PageAlert.tsx index df8927b9..a5023e3f 100644 --- a/apps/dispatch/app/_components/navbar/PageAlert.tsx +++ b/apps/dispatch/app/_components/navbar/PageAlert.tsx @@ -2,7 +2,7 @@ import { prisma } from "@repo/db"; import { MessageCircleWarning } from "lucide-react"; export const WarningAlert = async () => { - const config = await prisma.notam.findFirst({ + const config = await prisma.config.findFirst({ orderBy: [{ createdAt: "desc" }], }); diff --git a/apps/dispatch/app/layout.tsx b/apps/dispatch/app/layout.tsx index d53bcdd0..7d20354f 100644 --- a/apps/dispatch/app/layout.tsx +++ b/apps/dispatch/app/layout.tsx @@ -30,7 +30,7 @@ export default async function RootLayout({ }>) { const session = await getServerSession(); - const config = await prisma.notam.findFirst({ + const config = await prisma.config.findFirst({ orderBy: [{ createdAt: "desc" }], }); diff --git a/apps/hub/app/(app)/admin/config/_components/MessageForm.tsx b/apps/hub/app/(app)/admin/config/_components/MessageForm.tsx index fa491b89..15f8b83b 100644 --- a/apps/hub/app/(app)/admin/config/_components/MessageForm.tsx +++ b/apps/hub/app/(app)/admin/config/_components/MessageForm.tsx @@ -1,8 +1,7 @@ "use client"; import { zodResolver } from "@hookform/resolvers/zod"; -import { Notam } from "@repo/db"; -import { NotamOptionalDefaults, NotamOptionalDefaultsSchema } from "@repo/db/zod"; +import { ConfigOptionalDefaults, ConfigOptionalDefaultsSchema } from "@repo/db/zod"; import { useForm } from "react-hook-form"; import { addMessage, disableMessage } from "../action"; import "react-datepicker/dist/react-datepicker.css"; // <-- Add this line at the top if using react-datepicker @@ -16,8 +15,8 @@ export const MessageForm = ({ tableRef }: { tableRef: RefObject({ - resolver: zodResolver(NotamOptionalDefaultsSchema), + const form = useForm({ + resolver: zodResolver(ConfigOptionalDefaultsSchema), }); return ( diff --git a/apps/hub/app/(app)/admin/config/action.tsx b/apps/hub/app/(app)/admin/config/action.tsx index 29eb80e8..6a1600f2 100644 --- a/apps/hub/app/(app)/admin/config/action.tsx +++ b/apps/hub/app/(app)/admin/config/action.tsx @@ -1,9 +1,9 @@ "use server"; import { prisma, Prisma } from "@repo/db"; -export const addMessage = async (notam: Prisma.NotamCreateInput) => { +export const addMessage = async (notam: Prisma.ConfigCreateInput) => { try { - await prisma.notam.create({ + await prisma.config.create({ data: notam, }); } catch (error) { @@ -13,7 +13,7 @@ export const addMessage = async (notam: Prisma.NotamCreateInput) => { export const disableMessage = async () => { try { - await prisma.notam.create({ + await prisma.config.create({ data: {}, }); } catch (error) { diff --git a/apps/hub/app/(app)/admin/config/page.tsx b/apps/hub/app/(app)/admin/config/page.tsx index a832882c..e19171e9 100644 --- a/apps/hub/app/(app)/admin/config/page.tsx +++ b/apps/hub/app/(app)/admin/config/page.tsx @@ -4,7 +4,7 @@ import { Check, MessageSquareWarning, Settings } from "lucide-react"; import { MessageForm } from "./_components/MessageForm"; import { PaginatedTable, PaginatedTableRef } from "_components/PaginatedTable"; import { ColumnDef } from "@tanstack/react-table"; -import { Notam } from "@repo/db"; +import { Config } from "@repo/db"; import { useRef } from "react"; export default function MessagePage() { @@ -25,7 +25,7 @@ export default function MessagePage() { [] + ] as ColumnDef[] } /> diff --git a/apps/hub/app/_components/ui/PageAlert.tsx b/apps/hub/app/_components/ui/PageAlert.tsx index 3744f625..c3cd0010 100644 --- a/apps/hub/app/_components/ui/PageAlert.tsx +++ b/apps/hub/app/_components/ui/PageAlert.tsx @@ -2,7 +2,7 @@ import { prisma } from "@repo/db"; import { MessageCircleWarning } from "lucide-react"; export const WarningAlert = async () => { - const mainMessage = await await prisma.notam.findFirst({ + const mainMessage = await await prisma.config.findFirst({ orderBy: { createdAt: "desc", }, diff --git a/apps/hub/app/api/config/route.ts b/apps/hub/app/api/config/route.ts new file mode 100644 index 00000000..5cd7f85f --- /dev/null +++ b/apps/hub/app/api/config/route.ts @@ -0,0 +1,19 @@ +import { prisma } from "@repo/db"; +import { NextResponse } from "next/server"; + +export async function GET(request: Request): Promise { + try { + const config = await prisma.config.findFirst({ + orderBy: { + createdAt: "desc", + }, + }); + + return NextResponse.json(config, { + status: 200, + }); + } catch (error) { + console.error(error); + return NextResponse.json({ error: "Failed to fetch Aircrafts" }, { status: 500 }); + } +} diff --git a/apps/hub/app/layout.tsx b/apps/hub/app/layout.tsx index 028235d8..22b224a3 100644 --- a/apps/hub/app/layout.tsx +++ b/apps/hub/app/layout.tsx @@ -27,7 +27,7 @@ const RootLayout = async ({ }>) => { const session = await getServerSession(); - const latestNotam = await prisma.notam.findFirst({ + const latestNotam = await prisma.config.findFirst({ orderBy: { createdAt: "desc" }, }); diff --git a/packages/database/prisma/schema/notam.prisma b/packages/database/prisma/schema/config.prisma similarity index 96% rename from packages/database/prisma/schema/notam.prisma rename to packages/database/prisma/schema/config.prisma index 80dadc61..9d2f3424 100644 --- a/packages/database/prisma/schema/notam.prisma +++ b/packages/database/prisma/schema/config.prisma @@ -7,7 +7,7 @@ enum GlobalColor { ERROR } -model Notam { +model Config { id Int @id @default(autoincrement()) color GlobalColor? message String @default("") diff --git a/packages/database/prisma/schema/migrations/20250705185213_rename_notam_to_config/migration.sql b/packages/database/prisma/schema/migrations/20250705185213_rename_notam_to_config/migration.sql new file mode 100644 index 00000000..af5102c8 --- /dev/null +++ b/packages/database/prisma/schema/migrations/20250705185213_rename_notam_to_config/migration.sql @@ -0,0 +1 @@ +-- This is an empty migration. \ No newline at end of file diff --git a/packages/database/prisma/schema/migrations/20250705185304_rename_notam_to_config/migration.sql b/packages/database/prisma/schema/migrations/20250705185304_rename_notam_to_config/migration.sql new file mode 100644 index 00000000..036989a9 --- /dev/null +++ b/packages/database/prisma/schema/migrations/20250705185304_rename_notam_to_config/migration.sql @@ -0,0 +1,20 @@ +/* + Warnings: + + - You are about to drop the `Notam` table. If the table is not empty, all the data it contains will be lost. + +*/ +-- DropTable +DROP TABLE "Notam"; + +-- CreateTable +CREATE TABLE "Config" ( + "id" SERIAL NOT NULL, + "color" "GlobalColor", + "message" TEXT NOT NULL DEFAULT '', + "maintenanceEnabled" BOOLEAN NOT NULL DEFAULT false, + "disableHPG" BOOLEAN NOT NULL DEFAULT false, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "Config_pkey" PRIMARY KEY ("id") +);