Skip to content

Commit f41ec4d

Browse files
committed
Zodを使用してパラメータのバリデーションを追加
1 parent 5dfab79 commit f41ec4d

File tree

3 files changed

+30
-17
lines changed

3 files changed

+30
-17
lines changed

app/actions/chatActions.ts

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,32 @@
11
'use server';
22

33
import { GoogleGenerativeAI } from "@google/generative-ai";
4+
import { z } from "zod";
45

56
interface FormState {
67
response: string;
78
error: string | null;
89
}
910

10-
interface ChatParams {
11-
userQuestion: string;
12-
documentContent: string;
13-
}
11+
const ChatSchema = z.object({
12+
userQuestion: z.string().min(1, { message: "メッセージを入力してください。" }),
13+
documentContent: z.string().min(1, { message: "コンテキストとなるドキュメントがありません。"}),
14+
});
1415

1516
const genAI = new GoogleGenerativeAI(process.env.API_KEY!);
1617

17-
export async function askAI(params: ChatParams): Promise<FormState> {
18-
const { userQuestion, documentContent } = params;
19-
20-
if (!userQuestion || userQuestion.trim() === '') {
21-
return { response: '', error: 'メッセージを入力してください。' };
22-
}
18+
export async function askAI(params: unknown): Promise<FormState> {
19+
const parseResult = ChatSchema.safeParse(params);
2320

24-
if (!documentContent) {
25-
return { response: '', error: 'コンテキストとなるドキュメントがありません。' };
21+
if (!parseResult.success) {
22+
return {
23+
response: "",
24+
error: parseResult.error.issues.map((e) => e.message).join(", "),
25+
};
2626
}
2727

28+
const { userQuestion, documentContent } = parseResult.data;
29+
2830
try {
2931
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });
3032
const fullMessage = documentContent + "\n\n" + userQuestion;

package-lock.json

Lines changed: 14 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
"react-dom": "19.1.0",
2222
"react-markdown": "^10.1.0",
2323
"react-syntax-highlighter": "^15.6.1",
24-
"remark-gfm": "^4.0.1"
24+
"remark-gfm": "^4.0.1",
25+
"zod": "^4.0.17"
2526
},
2627
"devDependencies": {
2728
"@eslint/eslintrc": "^3",

0 commit comments

Comments
 (0)