public
anord
read
Ledger
Why work hard when you can work easier?
Languages
Repository composition by tracked source files.
TypeScript
86%
CSS
10%
SQL
3%
Shell
1%
HTML
0%
import { Router } from "express";
import { z } from "zod";
import { pool } from "../../db/pool.js";
import { enqueueWebhookEvent } from "../../services/webhooks.js";
import { logAudit } from "../../services/audit.js";
const feedbackSchema = z.object({
pageId: z.string().uuid(),
revisionId: z.string().uuid().optional(),
helpful: z.boolean(),
comment: z.string().max(1000).optional()
});
export const feedbackRouter = Router();
feedbackRouter.post("/", async (req, res) => {
const input = feedbackSchema.parse(req.body);
const result = await pool.query(
`
INSERT INTO feedback (page_id, page_revision_id, user_id, helpful, comment)
VALUES ($1, $2, $3, $4, $5)
RETURNING id
`,
[
input.pageId,
input.revisionId ?? null,
req.user?.id ?? null,
input.helpful,
input.comment ?? null
]
);
await enqueueWebhookEvent("feedback.created", {
feedbackId: result.rows[0].id,
pageId: input.pageId,
helpful: input.helpful
}, {
actor: req.user
? {
id: req.user.id,
name: req.user.displayName,
email: req.user.email
}
: null
});
await logAudit(req.user?.id ?? null, "feedback.create", "feedback", result.rows[0].id, {
pageId: input.pageId
});
return res.status(201).json({ feedbackId: result.rows[0].id });
});