import { createServerFn } from "@tanstack/react-start";
import { z } from "zod";
import { requireViewer, viewerMiddleware } from "./middleware";
import { repoDb } from "~/server/scoped-db";
import { randomId } from "~/server/crypto";
import { limitWrite } from "~/server/limits";
import { convertIssue, repoCategories, requireDiscussionAccess } from "~/server/discussions";
import { loadIssue, setIssueState } from "~/server/issues";
import { assertCount, PLANNING_CAPS } from "~/server/planning";
import { badRequest, notFoundError } from "~/server/errors";
import { repoRef } from "~/lib/validation";
const issueRef = repoRef.extend({ number: z.number().int().positive() });
export const saveDiscussionCategory = createServerFn({ method: "POST" })
.middleware([viewerMiddleware])
.validator(
repoRef.extend({
id: z.string().max(64).nullable(),
name: z.string().trim().min(1).max(40),
emoji: z.string().max(8),
description: z.string().max(200),
answerable: z.boolean(),
}),
)
.handler(async ({ data, context }) => {
const viewer = requireViewer(context.viewer);
await limitWrite(viewer);
const { repo } = await requireDiscussionAccess(data, viewer, "write", true);
if (data.id) {
await repoDb(repo.id).run(
"UPDATE discussion_categories SET name = ?, emoji = ?, description = ?, answerable = ? WHERE id = ? AND repo_id = ?",
data.name,
data.emoji,
data.description,
data.answerable ? 1 : 0,
data.id,
repo.id,
);
return { ok: true };