From 555166db6cfd41955426a7b886fe13893e7396ca Mon Sep 17 00:00:00 2001 From: Torben Haack Date: Fri, 11 Oct 2024 12:10:51 +0200 Subject: [PATCH] fix error handling --- .../docker/images/myp-rp_latest.tar.xz | 4 +- .../admin/printers/dialogs/delete-printer.tsx | 8 +- .../src/app/admin/printers/form.tsx | 16 +++- .../src/app/job/[jobId]/cancel-form.tsx | 8 +- .../src/app/job/[jobId]/edit-comments.tsx | 8 +- .../src/app/job/[jobId]/extend-form.tsx | 9 +- .../src/app/job/[jobId]/finish-form.tsx | 8 +- .../app/printer/[printerId]/reserve/form.tsx | 43 +++++---- .../src/server/actions/printJobs.ts | 96 +++++++++++++------ .../src/server/actions/printers.ts | 51 +++++++--- .../src/server/actions/users.ts | 22 +++-- 11 files changed, 194 insertions(+), 79 deletions(-) diff --git a/packages/reservation-platform/docker/images/myp-rp_latest.tar.xz b/packages/reservation-platform/docker/images/myp-rp_latest.tar.xz index c05c438..7c589d1 100644 --- a/packages/reservation-platform/docker/images/myp-rp_latest.tar.xz +++ b/packages/reservation-platform/docker/images/myp-rp_latest.tar.xz @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1e003b292a9a7ba353d6500235a648356bc100d91dd30ef4dd7807e7734dee33 -size 169643696 +oid sha256:a2961dd31aef56c7dc3c9012cb44b5de569b3c81267eb4a72be42455b0a3b39f +size 169660492 diff --git a/packages/reservation-platform/src/app/admin/printers/dialogs/delete-printer.tsx b/packages/reservation-platform/src/app/admin/printers/dialogs/delete-printer.tsx index d0b07bf..070f835 100644 --- a/packages/reservation-platform/src/app/admin/printers/dialogs/delete-printer.tsx +++ b/packages/reservation-platform/src/app/admin/printers/dialogs/delete-printer.tsx @@ -29,7 +29,13 @@ export function DeletePrinterDialog(props: DeletePrinterDialogProps) { description: "Drucker wird gelöscht...", }); try { - await deletePrinter(printerId); + const result = await deletePrinter(printerId); + if (result?.error) { + toast({ + description: result.error, + variant: "destructive", + }); + } toast({ description: "Drucker wurde gelöscht.", }); diff --git a/packages/reservation-platform/src/app/admin/printers/form.tsx b/packages/reservation-platform/src/app/admin/printers/form.tsx index a5bdf46..d630079 100644 --- a/packages/reservation-platform/src/app/admin/printers/form.tsx +++ b/packages/reservation-platform/src/app/admin/printers/form.tsx @@ -57,11 +57,17 @@ export function PrinterForm(props: PrinterFormProps) { // Update try { - await updatePrinter(printer.id, { + const result = await updatePrinter(printer.id, { description: values.description, name: values.name, status: values.status, }); + if (result?.error) { + toast({ + description: result.error, + variant: "destructive", + }); + } setOpen(false); @@ -90,11 +96,17 @@ export function PrinterForm(props: PrinterFormProps) { // Create try { - await createPrinter({ + const result = await createPrinter({ description: values.description, name: values.name, status: values.status, }); + if (result?.error) { + toast({ + description: result.error, + variant: "destructive", + }); + } setOpen(false); diff --git a/packages/reservation-platform/src/app/job/[jobId]/cancel-form.tsx b/packages/reservation-platform/src/app/job/[jobId]/cancel-form.tsx index 5b8a12a..2f02e9b 100644 --- a/packages/reservation-platform/src/app/job/[jobId]/cancel-form.tsx +++ b/packages/reservation-platform/src/app/job/[jobId]/cancel-form.tsx @@ -52,7 +52,13 @@ export function CancelForm(props: CancelFormProps) { description: "Druckauftrag wird abgebrochen...", }); try { - await abortPrintJob(jobId, values.abortReason); + const result = await abortPrintJob(jobId, values.abortReason); + if (result?.error) { + toast({ + description: result.error, + variant: "destructive", + }); + } setOpen(false); toast({ description: "Druckauftrag wurde abgebrochen.", diff --git a/packages/reservation-platform/src/app/job/[jobId]/edit-comments.tsx b/packages/reservation-platform/src/app/job/[jobId]/edit-comments.tsx index 8e9a612..cff92e1 100644 --- a/packages/reservation-platform/src/app/job/[jobId]/edit-comments.tsx +++ b/packages/reservation-platform/src/app/job/[jobId]/edit-comments.tsx @@ -17,7 +17,13 @@ export function EditComments(props: EditCommentsProps) { const debounced = useDebouncedCallback(async (value) => { try { - await updatePrintComments(jobId, value); + const result = await updatePrintComments(jobId, value); + if (result?.error) { + toast({ + description: result.error, + variant: "destructive", + }); + } toast({ description: "Anmerkungen wurden gespeichert.", }); diff --git a/packages/reservation-platform/src/app/job/[jobId]/extend-form.tsx b/packages/reservation-platform/src/app/job/[jobId]/extend-form.tsx index d0b1d5a..3295d4d 100644 --- a/packages/reservation-platform/src/app/job/[jobId]/extend-form.tsx +++ b/packages/reservation-platform/src/app/job/[jobId]/extend-form.tsx @@ -53,7 +53,14 @@ export function ExtendForm(props: ExtendFormProps) { description: "Druckauftrag wird verlängert...", }); try { - await extendPrintJob(jobId, values.minutes, values.hours); + const result = await extendPrintJob(jobId, values.minutes, values.hours); + + if (result?.error) { + toast({ + description: result.error, + variant: "destructive", + }); + } setOpen(false); form.reset(); diff --git a/packages/reservation-platform/src/app/job/[jobId]/finish-form.tsx b/packages/reservation-platform/src/app/job/[jobId]/finish-form.tsx index 1f33c45..03918e8 100644 --- a/packages/reservation-platform/src/app/job/[jobId]/finish-form.tsx +++ b/packages/reservation-platform/src/app/job/[jobId]/finish-form.tsx @@ -27,7 +27,13 @@ export function FinishForm(props: FinishFormProps) { description: "Druckauftrag wird abgeschlossen...", }); try { - await earlyFinishPrintJob(jobId); + const result = await earlyFinishPrintJob(jobId); + if (result?.error) { + toast({ + description: result.error, + variant: "destructive", + }); + } toast({ description: "Druckauftrag wurde abgeschlossen.", }); diff --git a/packages/reservation-platform/src/app/printer/[printerId]/reserve/form.tsx b/packages/reservation-platform/src/app/printer/[printerId]/reserve/form.tsx index 5722bf5..d5f6e29 100644 --- a/packages/reservation-platform/src/app/printer/[printerId]/reserve/form.tsx +++ b/packages/reservation-platform/src/app/printer/[printerId]/reserve/form.tsx @@ -1,15 +1,7 @@ "use client"; import { Button } from "@/components/ui/button"; import { DialogClose } from "@/components/ui/dialog"; -import { - Form, - FormControl, - FormDescription, - FormField, - FormItem, - FormLabel, - FormMessage, -} from "@/components/ui/form"; +import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; import { Textarea } from "@/components/ui/textarea"; import { useToast } from "@/components/ui/use-toast"; @@ -17,6 +9,7 @@ import { createPrintJob } from "@/server/actions/printJobs"; import { zodResolver } from "@hookform/resolvers/zod"; import { CalendarPlusIcon, XCircleIcon } from "lucide-react"; import { useRouter } from "next/navigation"; +import { useState } from "react"; import { useForm } from "react-hook-form"; import { If, Then } from "react-if"; import { z } from "zod"; @@ -41,6 +34,7 @@ export function PrinterReserveForm(props: PrinterReserveFormProps) { const { userId, printerId, isDialog } = props; const router = useRouter(); const { toast } = useToast(); + const [lock, setLocked] = useState(false); const form = useForm>({ resolver: zodResolver(formSchema), @@ -52,13 +46,22 @@ export function PrinterReserveForm(props: PrinterReserveFormProps) { }); async function onSubmit(values: z.infer) { + if (!lock) { + setLocked(true); + } else { + toast({ + description: "Bitte warte ein wenig, bevor du eine weitere Reservierung tätigst...", + variant: "default", + }); + return; + } + if (values.hours === 0 && values.minutes === 0) { form.setError("hours", { message: "", }); form.setError("minutes", { - message: - "Die Dauer des Druckauftrags muss mindestens 1 Minute betragen.", + message: "Die Dauer des Druckauftrags muss mindestens 1 Minute betragen.", }); return; } @@ -70,6 +73,12 @@ export function PrinterReserveForm(props: PrinterReserveFormProps) { userId: userId, printerId: printerId, }); + if (typeof jobId === "object") { + toast({ + description: jobId.error, + variant: "destructive", + }); + } router.push(`/job/${jobId}`); } catch (error) { @@ -128,9 +137,8 @@ export function PrinterReserveForm(props: PrinterReserveFormProps) {