Skip to content

Commit b1ddc64

Browse files
committed
fix scheduling error messages
1 parent 43fcdcb commit b1ddc64

File tree

2 files changed

+52
-22
lines changed

2 files changed

+52
-22
lines changed

src/lib/news/server/actions.ts

Lines changed: 40 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,13 @@ import { redirect } from "$lib/utils/redirect";
66
import { slugWithCount, slugify } from "$lib/utils/slugify";
77
import * as m from "$paraglide/messages";
88
import { Prisma } from "@prisma/client";
9-
import { isActionFailure, type Action } from "@sveltejs/kit";
9+
import { type Action } from "@sveltejs/kit";
1010
import type { AuthUser } from "@zenstackhq/runtime";
1111
import { zod } from "sveltekit-superforms/adapters";
1212
import { message, superValidate, fail } from "sveltekit-superforms";
1313
import DOMPurify from "isomorphic-dompurify";
1414
import {
15+
isScheduleFailure,
1516
scheduleExecution,
1617
type ScheduleSuccess,
1718
} from "$lib/server/scheduleExecution";
@@ -132,7 +133,7 @@ export const createArticle: Action = async (event) => {
132133

133134
const pubishTimeIsInFuture = publishTime && publishTime > new Date();
134135
if (pubishTimeIsInFuture && shouldSendNotification) {
135-
const scheduledResult = await scheduleExecution(
136+
const scheduleResult = await scheduleExecution(
136137
request,
137138
`${url.origin}/api/schedule/news`,
138139
{ ...result, tags, notificationText },
@@ -144,12 +145,18 @@ export const createArticle: Action = async (event) => {
144145
event,
145146
);
146147

147-
if (isActionFailure(scheduledResult)) {
148-
return scheduledResult;
148+
if (isScheduleFailure(scheduleResult)) {
149+
throw redirect(
150+
`/news/${result.slug}/edit`,
151+
{
152+
message: scheduleResult.data.message,
153+
type: "error",
154+
},
155+
event,
156+
);
149157
}
150158

151-
const { redirectFunction, scheduledId } =
152-
scheduledResult as ScheduleSuccess;
159+
const { redirectFunction, scheduledId } = scheduleResult as ScheduleSuccess;
153160

154161
await prisma.article.update({
155162
where: {
@@ -280,8 +287,15 @@ export const updateArticle: Action<{ slug: string }> = async (event) => {
280287
event,
281288
);
282289

283-
if (isActionFailure(scheduleResult)) {
284-
return scheduleResult;
290+
if (isScheduleFailure(scheduleResult)) {
291+
throw redirect(
292+
`/news/${slug}/edit`,
293+
{
294+
message: scheduleResult.data.message,
295+
type: "error",
296+
},
297+
event,
298+
);
285299
} else {
286300
await prisma.article.update({
287301
where: {
@@ -316,16 +330,26 @@ export const updateArticle: Action<{ slug: string }> = async (event) => {
316330
).ok;
317331
}
318332
} catch (error) {
319-
return fail(500, {
320-
form,
321-
message: `${m.news_errors_schedulingFailed()}: ${error instanceof Error ? error.message : String(error)}`,
322-
});
333+
throw redirect(
334+
`/news/${slug}/edit`,
335+
{
336+
message: `${m.news_errors_schedulingFailed()}: ${
337+
error instanceof Error ? error.message : String(error)
338+
}`,
339+
type: "error",
340+
},
341+
event,
342+
);
323343
}
324344
if (!ok) {
325-
return fail(500, {
326-
form,
327-
message: m.news_errors_schedulingFailed(),
328-
});
345+
throw redirect(
346+
`/news/${slug}/edit`,
347+
{
348+
message: m.news_errors_schedulingFailed(),
349+
type: "error",
350+
},
351+
event,
352+
);
329353
}
330354
}
331355

src/lib/server/scheduleExecution.ts

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,38 @@
11
import { redirect } from "$lib/utils/redirect";
22
import { getDecryptedJWT } from "$lib/server/getDecryptedJWT";
33
import { env } from "$env/dynamic/private";
4-
import { type SuperValidated, fail } from "sveltekit-superforms";
4+
import { fail } from "sveltekit-superforms";
55
import type { ActionFailure, RequestEvent } from "@sveltejs/kit";
66

77
export type ScheduleSuccess = {
88
redirectFunction: () => never;
99
scheduledId: string;
1010
};
1111

12-
export type ScheduleResult =
12+
export type ScheduleResult<T> =
1313
| ActionFailure<{
14-
form: SuperValidated<Record<string, unknown>>;
14+
form: T;
1515
message: string;
1616
}>
1717
| ScheduleSuccess;
1818

19-
export const scheduleExecution = async (
19+
export const isScheduleFailure = <T>(
20+
result: ScheduleResult<T>,
21+
): result is ActionFailure<{ form: T; message: string }> => {
22+
return "status" in result;
23+
};
24+
25+
export const scheduleExecution = async <T>(
2026
request: Request,
2127
endpointURL: string,
2228
data: Record<string, unknown>,
2329
publishTime: Date,
24-
form: SuperValidated<Record<string, unknown>>,
30+
form: T,
2531
errorMessage: string,
2632
successMessage: string,
2733
redirectEndpoint: string,
2834
event: RequestEvent,
29-
): Promise<ScheduleResult> => {
35+
): Promise<ScheduleResult<T>> => {
3036
const jwt = await getDecryptedJWT(request);
3137
let result;
3238
try {

0 commit comments

Comments
 (0)