Skip to content

Commit 9f703ab

Browse files
committed
feat: add support ticket feedback with CSAT integration
1 parent ecddcf3 commit 9f703ab

File tree

1 file changed

+26
-12
lines changed
  • apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/support/apis

1 file changed

+26
-12
lines changed

apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/support/apis/feedback.ts

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,31 @@
1-
"use server";
2-
1+
import { z } from "zod";
32
import { getVercelEnv } from "@/utils/vercel";
43

5-
interface FeedbackData {
6-
rating: number;
7-
feedback: string;
4+
type SupportFeedbackInput = {
85
ticketId: string;
6+
rating: number;
7+
feedback?: string;
98
teamId?: string;
10-
}
9+
};
10+
11+
const SupportFeedbackSchema = z.object({
12+
ticketId: z.string().min(1, "Missing ticketId"),
13+
rating: z.number().int().min(1).max(5),
14+
feedback: z.string().trim().max(1000).optional().default(""),
15+
teamId: z.string().optional(),
16+
});
1117

1218
export async function submitSupportFeedback(
13-
data: FeedbackData,
19+
data: SupportFeedbackInput,
1420
): Promise<{ success: true } | { error: string }> {
21+
"use server";
22+
23+
const parsed = SupportFeedbackSchema.safeParse(data);
24+
if (!parsed.success) {
25+
return { error: parsed.error.issues.map((i) => i.message).join(", ") };
26+
}
27+
const input = parsed.data;
28+
1529
try {
1630
const apiKey = process.env.NEXT_PUBLIC_DASHBOARD_CLIENT_ID;
1731
if (!apiKey) {
@@ -31,9 +45,9 @@ export async function submitSupportFeedback(
3145
"x-service-api-key": apiKey,
3246
},
3347
body: JSON.stringify({
34-
rating: data.rating,
35-
feedback: data.feedback,
36-
ticket_id: data.ticketId,
48+
rating: input.rating,
49+
feedback: input.feedback,
50+
ticket_id: input.ticketId,
3751
}),
3852
});
3953

@@ -46,8 +60,8 @@ export async function submitSupportFeedback(
4660
console.debug(
4761
"CSAT endpoint not available; treating as success in preview/dev",
4862
{
49-
rating: data.rating,
50-
ticket_id: data.ticketId,
63+
rating: input.rating,
64+
ticket_id: input.ticketId,
5165
vercel_env: vercelEnv,
5266
},
5367
);

0 commit comments

Comments
 (0)