-
Notifications
You must be signed in to change notification settings - Fork 0
/
add-contents.ts
34 lines (31 loc) · 1.21 KB
/
add-contents.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
"use server";
import "server-only";
import { sendLineNotifyMessage } from "@/apis/line-notify/fetch-message";
import { createSelfContents } from "@/apis/prisma/fetch-contents";
import { SUCCESS_MESSAGES } from "@/constants";
import { NotAllowedError } from "@/error-classes";
import { wrapServerSideErrorForClient } from "@/error-wrapper";
import { checkPostPermission } from "@/features/auth/utils/role";
import type { ContentsContext } from "@/features/dump/stores/contents-context";
import { validateContents } from "@/features/dump/utils/validate-contents";
import type { ServerAction } from "@/types";
import { formatCreateContentsMessage } from "@/utils/format-for-line";
export async function addContents(
formData: FormData,
): Promise<ServerAction<ContentsContext>> {
try {
const hasPostPermission = await checkPostPermission();
if (!hasPostPermission) throw new NotAllowedError();
const createdContents = await createSelfContents(
validateContents(formData),
);
await sendLineNotifyMessage(formatCreateContentsMessage(createdContents));
return {
success: true,
message: SUCCESS_MESSAGES.INSERTED,
data: createdContents,
};
} catch (error) {
return await wrapServerSideErrorForClient(error);
}
}