50 lines
1.2 KiB
TypeScript
50 lines
1.2 KiB
TypeScript
import { defineAction } from 'astro:actions';
|
|
import { db } from '@db/database.ts';
|
|
import { Session } from '@util/session.ts';
|
|
import { Permissions } from '@util/permissions.ts';
|
|
import { z } from 'astro:schema';
|
|
|
|
export const feedback = {
|
|
addWebsiteFeedback: defineAction({
|
|
input: z.object({
|
|
content: z.string()
|
|
}),
|
|
handler: async (input) => {
|
|
await db.addFeedback({
|
|
event: 'website-feedback',
|
|
content: input.content
|
|
});
|
|
}
|
|
}),
|
|
addWebsiteContact: defineAction({
|
|
input: z.object({
|
|
content: z.string(),
|
|
email: z.string().email()
|
|
}),
|
|
handler: async (input) => {
|
|
await db.addFeedback({
|
|
event: 'website-contact',
|
|
content: `${input.content}\n\nEmail: ${input.email}`
|
|
});
|
|
}
|
|
}),
|
|
submitFeedback: defineAction({
|
|
input: z.object({
|
|
urlHash: z.string(),
|
|
content: z.string()
|
|
}),
|
|
handler: async (input) => {
|
|
await db.submitFeedback(input);
|
|
}
|
|
}),
|
|
feedbacks: defineAction({
|
|
handler: async (_, context) => {
|
|
Session.actionSessionFromCookies(context.cookies, Permissions.Feedback);
|
|
|
|
return {
|
|
feedbacks: await db.getFeedbacks({})
|
|
};
|
|
}
|
|
})
|
|
};
|