Files
kandev/apps/web/lib/api/domains/plan-comment-api.ts
T
2026-09-10 22:33:56 +01:00

74 lines
2.1 KiB
TypeScript

import { getWebSocketClient } from "@/lib/ws/connection";
import type { TaskPlanCommentSnapshot } from "@/lib/types/http";
// i18n-exempt: programmer precondition; UI callers render localized errors.
const WS_CLIENT_UNAVAILABLE = "WebSocket client not available";
type CreatePlanCommentInput = {
taskId: string;
planId: string;
id: string;
body: string;
selectedText: string;
anchorFrom: number;
anchorTo: number;
};
type MutatePlanCommentInput = {
taskId: string;
planId: string;
id: string;
expectedVersion: number;
};
type UpdatePlanCommentInput = MutatePlanCommentInput & { body: string };
function requireClient() {
const client = getWebSocketClient();
if (!client) throw new Error(WS_CLIENT_UNAVAILABLE);
return client;
}
export async function getTaskPlanComments(taskId: string): Promise<TaskPlanCommentSnapshot> {
return (await requireClient().request("task.plan.comments.list", {
task_id: taskId,
})) as TaskPlanCommentSnapshot;
}
export async function createTaskPlanComment(
input: CreatePlanCommentInput,
): Promise<TaskPlanCommentSnapshot> {
return (await requireClient().request("task.plan.comments.create", {
task_id: input.taskId,
plan_id: input.planId,
id: input.id,
body: input.body,
selected_text: input.selectedText,
anchor_from: input.anchorFrom,
anchor_to: input.anchorTo,
})) as TaskPlanCommentSnapshot;
}
export async function updateTaskPlanComment(
input: UpdatePlanCommentInput,
): Promise<TaskPlanCommentSnapshot> {
return (await requireClient().request("task.plan.comments.update", {
task_id: input.taskId,
plan_id: input.planId,
id: input.id,
body: input.body,
expected_version: input.expectedVersion,
})) as TaskPlanCommentSnapshot;
}
export async function deleteTaskPlanComment(
input: MutatePlanCommentInput,
): Promise<TaskPlanCommentSnapshot> {
return (await requireClient().request("task.plan.comments.delete", {
task_id: input.taskId,
plan_id: input.planId,
id: input.id,
expected_version: input.expectedVersion,
})) as TaskPlanCommentSnapshot;
}