From f8389383f8c61460eb22c6aa55f1a8c1ab50d03b Mon Sep 17 00:00:00 2001 From: PxlLoewe <72106766+PxlLoewe@users.noreply.github.com> Date: Tue, 24 Jun 2025 20:07:54 -0700 Subject: [PATCH] added dockerfile for docs --- .../app/_components/map/ContextMenu.tsx | 19 ++++---- apps/docs/.dockerignore | 2 + apps/docs/Dockerfile | 32 +++++++++++++ apps/hub/app/(app)/_components/Penalty.tsx | 47 ++++++++++++------- apps/hub/app/(app)/admin/penalty/actions.ts | 10 ++++ .../admin/user/[id]/_components/forms.tsx | 5 +- docker-compose.prod.yml | 15 +++++- .../database/prisma/schema/mission.prisma | 6 +-- 8 files changed, 105 insertions(+), 31 deletions(-) create mode 100644 apps/docs/.dockerignore create mode 100644 apps/docs/Dockerfile diff --git a/apps/dispatch/app/_components/map/ContextMenu.tsx b/apps/dispatch/app/_components/map/ContextMenu.tsx index e8c3bf54..e7a12067 100644 --- a/apps/dispatch/app/_components/map/ContextMenu.tsx +++ b/apps/dispatch/app/_components/map/ContextMenu.tsx @@ -59,16 +59,17 @@ export const ContextMenu = () => { const addOSMobjects = async (ignorePreviosSelected?: boolean) => { const res = await fetch( `https://overpass-api.de/api/interpreter?data=${encodeURIComponent(` - [out:json]; - ( - way["building"](around:100, ${contextMenu.lat}, ${contextMenu.lng}); - relation["building"](around:100, ${contextMenu.lat}, ${contextMenu.lng}); - ); - out body; - >; - out skel qt; - `)}`, + [out:json]; + ( + way["leisure"~"pitch|sports_centre"](around:2000, ${contextMenu.lat}, ${contextMenu.lng}); + relation["leisure"~"pitch|sports_centre"](around:2000, ${contextMenu.lat}, ${contextMenu.lng}); + ); + out body; + >; + out skel qt; + `)}`, ); + const data = await res.json(); const parsed: OSMWay[] = data.elements .filter((e: any) => e.type === "way") diff --git a/apps/docs/.dockerignore b/apps/docs/.dockerignore new file mode 100644 index 00000000..76add878 --- /dev/null +++ b/apps/docs/.dockerignore @@ -0,0 +1,2 @@ +node_modules +dist \ No newline at end of file diff --git a/apps/docs/Dockerfile b/apps/docs/Dockerfile new file mode 100644 index 00000000..c89b3760 --- /dev/null +++ b/apps/docs/Dockerfile @@ -0,0 +1,32 @@ +# --- Build stage --- +FROM node:24-alpine3.21 AS builder +# Consider using the latest patch version for security updates +RUN apk update && apk upgrade + +# Install pnpm +RUN corepack enable && corepack prepare pnpm@latest --activate +RUN apk add --no-cache git + +# Set workdir +WORKDIR /app + +# Copy project files +COPY ./apps/docs . + +# Install dependencies +RUN pnpm install + +# Build VitePress site +RUN pnpm build + +# --- Serve stage --- +FROM nginx:alpine + +# Copy built site to nginx public folder +COPY --from=builder /app/.vitepress/dist /usr/share/nginx/html + +# Expose port +EXPOSE 80 + +# Start nginx +CMD ["nginx", "-g", "daemon off;"] diff --git a/apps/hub/app/(app)/_components/Penalty.tsx b/apps/hub/app/(app)/_components/Penalty.tsx index 2e64e1b7..f3f1fc61 100644 --- a/apps/hub/app/(app)/_components/Penalty.tsx +++ b/apps/hub/app/(app)/_components/Penalty.tsx @@ -1,46 +1,55 @@ import { getPublicUser, prisma } from "@repo/db"; import { TriangleAlert } from "lucide-react"; -import { getServerSession } from "next-auth"; import { PenaltyCountdown } from "./PenaltyCountdown"; +import { getServerSession } from "api/auth/[...nextauth]/auth"; export const Penalty = async () => { const session = await getServerSession(); - const openPenaltys = await prisma.penalty.findMany({ + const openTimeban = await prisma.penalty.findMany({ where: { userId: session?.user.id, until: { gte: new Date(), }, suspended: false, - - type: { in: ["TIME_BAN", "BAN"] }, + type: { in: ["TIME_BAN"] }, }, include: { CreatedUser: true, }, }); - if (!openPenaltys[0]) { - return null; - } + + const openBans = await prisma.penalty.findMany({ + where: { + userId: session?.user.id, + suspended: false, + type: { in: ["BAN"] }, + }, + include: { + CreatedUser: true, + }, + }); + + console.log("Open Penaltys:", session); return (
- {openPenaltys[0].type === "TIME_BAN" && ( + {openTimeban[0] && openTimeban[0].type === "TIME_BAN" && (

- Aktive Strafe - {" "} + Aktive Strafe - {" "} verbleibend

Du hast eine aktive Strafe und kannst dich deshalb nicht mit dem Netzwerk verbinden.

- Grund: {openPenaltys[0].reason} + Grund: {openTimeban[0].reason}

Admin:{" "} - {getPublicUser(openPenaltys[0].CreatedUser).fullName} + {getPublicUser(openTimeban[0].CreatedUser).fullName}

)} @@ -54,11 +63,17 @@ export const Penalty = async () => { Dein Fehlverhalten war so schwerwiegend, dass du dauerhaft von VirtualAirRescue ausgeschlossen wurdest. Du kannst dich nicht mehr mit dem Netzwerk verbinden.

-

Grund: {openPenaltys[0].reason}

-

- Admin:{" "} - {getPublicUser(openPenaltys[0].CreatedUser).fullName} -

+ {openBans[0] && ( + <> +

+ Grund: {openBans[0].reason || "Keine Begründung gefunden"} +

+

+ Admin:{" "} + {getPublicUser(openBans[0].CreatedUser).fullName || "Keine Admin gefunden"} +

+ + )}
)} diff --git a/apps/hub/app/(app)/admin/penalty/actions.ts b/apps/hub/app/(app)/admin/penalty/actions.ts index 0df62807..6abfbeb9 100644 --- a/apps/hub/app/(app)/admin/penalty/actions.ts +++ b/apps/hub/app/(app)/admin/penalty/actions.ts @@ -18,3 +18,13 @@ export const editPenalty = async (id: number, data: Prisma.PenaltyUpdateInput) = data, }); }; + +export const editPenaltys = async ( + data: Prisma.PenaltyUpdateInput, + where: Prisma.PenaltyWhereInput, +) => { + return await prisma.penalty.updateMany({ + where, + data, + }); +}; 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 8ccd11c8..bd4fa41a 100644 --- a/apps/hub/app/(app)/admin/user/[id]/_components/forms.tsx +++ b/apps/hub/app/(app)/admin/user/[id]/_components/forms.tsx @@ -50,7 +50,7 @@ import { useSession } from "next-auth/react"; import { setStandardName } from "../../../../../../helper/discord"; import { penaltyColumns } from "(app)/admin/penalty/columns"; import { PenaltyDropdown } from "(app)/admin/user/[id]/_components/AddPenaltyDropdown"; -import { addPenalty } from "(app)/admin/penalty/actions"; +import { addPenalty, editPenalty, editPenaltys } from "(app)/admin/penalty/actions"; interface ProfileFormProps { user: User; @@ -357,7 +357,7 @@ export const UserPenalties = ({ user }: { user: User }) => { userId: user.id, createdUserId: createdUser.id, }); - await editUser(user.id, { isBanned: true, permissions: [] }); + await editUser(user.id, { isBanned: true }); penaltyTable.current?.refresh(); toast.success("Ban wurde hinzugefügt!"); }} @@ -506,6 +506,7 @@ export const AdminForm = ({