fix: use stable public ids for card webhook (#463)

Signed-off-by: Vikram Vaswani <2571660+vvaswani@users.noreply.github.com>
This commit is contained in:
vvaswani
2026-04-21 01:49:31 +05:30
committed by GitHub
parent b46979f539
commit e39faa1172
4 changed files with 95 additions and 27 deletions

View File

@@ -189,7 +189,7 @@ export const cardRouter = createTRPCRouter({
title: input.title,
description: input.description,
dueDate: input.dueDate ?? null,
listId: String(newCard.listId),
listId: list.publicId,
},
{
boardId: list.boardPublicId,
@@ -888,9 +888,18 @@ export const cardRouter = createTRPCRouter({
);
let newListId: number | undefined;
let newList:
| {
id: number;
publicId: string;
name: string;
boardId: number;
index: number;
}
| undefined;
if (input.listPublicId) {
const newList = await listRepo.getByPublicId(
newList = await listRepo.getByPublicId(
ctx.db,
input.listPublicId,
);
@@ -1037,8 +1046,19 @@ export const cardRouter = createTRPCRouter({
) {
webhookChanges.dueDate = { from: previousDueDate, to: input.dueDate };
}
if (newListId && existingCard.listId !== newListId) {
webhookChanges.listId = { from: existingCard.listId, to: newListId };
const movedToNewList = Boolean(newListId && existingCard.listId !== newListId);
const currentWebhookListPublicId = movedToNewList
? input.listPublicId!
: existingCard.list.publicId;
const currentWebhookListName = movedToNewList
? newList?.name ?? card.listName
: existingCard.list.name;
if (movedToNewList) {
webhookChanges.listId = {
from: existingCard.list.publicId,
to: input.listPublicId!,
};
}
// Fire webhooks (non-blocking)
@@ -1046,20 +1066,18 @@ export const cardRouter = createTRPCRouter({
ctx.db,
card.workspaceId,
createCardWebhookPayload(
newListId && existingCard.listId !== newListId
? "card.moved"
: "card.updated",
movedToNewList ? "card.moved" : "card.updated",
{
id: String(result.id),
title: result.title,
description: result.description,
dueDate: result.dueDate,
listId: String(newListId ?? existingCard.listId),
listId: currentWebhookListPublicId,
},
{
boardId: card.boardPublicId,
boardName: card.boardName,
listName: card.listName,
listName: currentWebhookListName,
user: ctx.user
? { id: ctx.user.id, name: ctx.user.name }
: undefined,
@@ -1149,12 +1167,12 @@ export const cardRouter = createTRPCRouter({
title: fullCard.title,
description: fullCard.description,
dueDate: fullCard.dueDate,
listId: String(fullCard.listId),
listId: fullCard.list.publicId,
},
{
boardId: card.boardPublicId,
boardName: card.boardName,
listName: card.listName,
listName: fullCard.list.name,
user: ctx.user
? { id: ctx.user.id, name: ctx.user.name }
: undefined,