fix: include createdAt and updatedAt in ColumnPayload mapping

This commit is contained in:
Power BI Dev
2026-08-17 18:42:26 +07:00
parent 8e958ea0ed
commit 1336849b6b
3 changed files with 31 additions and 10 deletions
+27 -10
View File
@@ -14,6 +14,7 @@ export class BoardService {
title: title.trim() || 'Agile Kanban Board', title: title.trim() || 'Agile Kanban Board',
adminKeyHash, adminKeyHash,
memberKeyHash, memberKeyHash,
memberKey,
autoMoveStale: false, autoMoveStale: false,
columns: { columns: {
create: [ create: [
@@ -79,24 +80,24 @@ export class BoardService {
boardId: col.boardId, boardId: col.boardId,
title: col.title, title: col.title,
order: col.order, order: col.order,
maxWipLimit: col.maxWipLimit || 0, maxWipLimit: col.maxWipLimit,
autoStaleHours: col.autoStaleHours || 0, autoStaleHours: col.autoStaleHours,
createdAt: col.createdAt.toISOString(), createdAt: col.createdAt.toISOString(),
updatedAt: col.updatedAt.toISOString(), updatedAt: col.updatedAt.toISOString(),
tickets: col.tickets.map((t) => { tickets: col.tickets.map((t) => {
let parsedTags = []; let tags = [];
let parsedSubtasks = []; let subtasks = [];
try { try {
parsedTags = JSON.parse(t.tags || '[]'); tags = JSON.parse(t.tags || '[]');
} }
catch { catch {
parsedTags = []; tags = [];
} }
try { try {
parsedSubtasks = JSON.parse(t.subtasks || '[]'); subtasks = JSON.parse(t.subtasks || '[]');
} }
catch { catch {
parsedSubtasks = []; subtasks = [];
} }
return { return {
id: t.id, id: t.id,
@@ -105,8 +106,8 @@ export class BoardService {
description: t.description, description: t.description,
order: t.order, order: t.order,
priority: t.priority, priority: t.priority,
tags: parsedTags, tags,
subtasks: parsedSubtasks, subtasks,
dueDate: t.dueDate || null, dueDate: t.dueDate || null,
isBlocked: t.isBlocked || false, isBlocked: t.isBlocked || false,
blockedReason: t.blockedReason || null, blockedReason: t.blockedReason || null,
@@ -117,10 +118,25 @@ export class BoardService {
}; };
}), }),
})); }));
let memberKeyVal = board.memberKey || '';
if (!memberKeyVal && role === 'admin') {
const newMemberKey = generateSecureKey(32);
const newMemberKeyHash = hashKey(newMemberKey);
await prisma.board.update({
where: { id: boardId },
data: {
memberKey: newMemberKey,
memberKeyHash: newMemberKeyHash,
},
});
memberKeyVal = newMemberKey;
}
return { return {
id: board.id, id: board.id,
title: board.title, title: board.title,
role, role,
memberKey: memberKeyVal,
memberUrlFragment: memberKeyVal ? `/b/${board.id}#member=${memberKeyVal}` : '',
autoMoveStale: board.autoMoveStale || false, autoMoveStale: board.autoMoveStale || false,
columns, columns,
createdAt: board.createdAt.toISOString(), createdAt: board.createdAt.toISOString(),
@@ -137,6 +153,7 @@ export class BoardService {
where: { id: boardId }, where: { id: boardId },
data: { data: {
memberKeyHash: newMemberKeyHash, memberKeyHash: newMemberKeyHash,
memberKey: newMemberKey,
}, },
}); });
return { return {
+2
View File
@@ -30,6 +30,8 @@ export interface BoardPayload {
id: string; id: string;
title: string; title: string;
role: Role; role: Role;
memberKey?: string;
memberUrlFragment?: string;
autoMoveStale: boolean; autoMoveStale: boolean;
columns: ColumnPayload[]; columns: ColumnPayload[];
createdAt: string; createdAt: string;
+2
View File
@@ -93,6 +93,8 @@ export class BoardService {
order: col.order, order: col.order,
maxWipLimit: col.maxWipLimit, maxWipLimit: col.maxWipLimit,
autoStaleHours: col.autoStaleHours, autoStaleHours: col.autoStaleHours,
createdAt: col.createdAt.toISOString(),
updatedAt: col.updatedAt.toISOString(),
tickets: col.tickets.map((t) => { tickets: col.tickets.map((t) => {
let tags: string[] = []; let tags: string[] = [];
let subtasks: Subtask[] = []; let subtasks: Subtask[] = [];