NobGit
public anord read

Ledger

Why work hard when you can work easier?

Languages

Repository composition by tracked source files.

TypeScript
TypeScript 86% CSS 10% SQL 3% Shell 1% HTML 0%
Create file Wiki Documentation
Clone
https://nobgit.com/orgs/anord/ledger.git
ssh://[email protected]:2222/orgs/anord/ledger.git
feedback.ts
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 });
});