diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index d33508e6..58726874 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -121,8 +121,9 @@
- - + {#if data?.user} + + {/if}
diff --git a/src/routes/api/feedback/+server.ts b/src/routes/api/feedback/+server.ts index fc351c7a..b69aacb8 100644 --- a/src/routes/api/feedback/+server.ts +++ b/src/routes/api/feedback/+server.ts @@ -1,17 +1,52 @@ import type { RequestHandler } from "./$types"; export const POST: RequestHandler = async ({ request, locals }) => { + // Parse incoming data const data = await request.json(); const { pb } = locals; - let output = 'failure'; - try { - await pb.collection("feedback").create(data) - output = 'success'; - } - catch(e) { - console.log(e) - output = 'failure'; - } + console.log("Incoming feedback data:", data); - return new Response(JSON.stringify(output)); + // Ensure user is identified from the request + const userId = data?.user || locals.user?.id; + if (!userId) { + return new Response(JSON.stringify({ error: "User identification required" }), { status: 400 }); + } + + const fifteenMinutesAgo = new Date(Date.now() - 15 * 60 * 1000); + + try { + // Query the feedback collection for entries created by this user in the last 15 minutes + const feedbackList = await pb.collection("feedback").getFullList({ + filter: `user="${userId}"` + }); + + const recentFeedbacks = feedbackList?.filter(item => new Date(item?.created) >= fifteenMinutesAgo); + // If the user has already submitted 2 feedback entries, prevent new submission + if (recentFeedbacks?.length >= 2) { + return new Response( + JSON.stringify({ error: "Rate limit exceeded. Please wait before submitting more feedback." }), + { status: 429 } + ); + } + } catch (err) { + console.error("Error checking recent feedback:", err); + return new Response(JSON.stringify({ error: "Server error" }), { status: 500 }); + } + + // Create the feedback entry since the user hasn't exceeded the limit + let output = "failure"; + try { + await pb.collection("feedback").create({ + user: userId, + description: data.description, + rating: data.rating, + category: data.category + }); + output = "success"; + } catch (e) { + console.error("Error creating feedback:", e); + output = "failure"; + } + + return new Response(JSON.stringify({ status: output })); };