kaneo (minimalist kanban) fork to experiment adding a tangled integration github.com/usekaneo/kaneo
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at 9a620ba2f31238f03cd28f1da5ef3838d67e4e8a 70 lines 1.8 kB view raw
1import { eq, inArray, or } from "drizzle-orm"; 2import db from "../../database"; 3import { taskRelationTable, taskTable, userTable } from "../../database/schema"; 4 5async function getTaskRelations(taskId: string) { 6 const relations = await db 7 .select({ 8 id: taskRelationTable.id, 9 sourceTaskId: taskRelationTable.sourceTaskId, 10 targetTaskId: taskRelationTable.targetTaskId, 11 relationType: taskRelationTable.relationType, 12 createdAt: taskRelationTable.createdAt, 13 }) 14 .from(taskRelationTable) 15 .where( 16 or( 17 eq(taskRelationTable.sourceTaskId, taskId), 18 eq(taskRelationTable.targetTaskId, taskId), 19 ), 20 ); 21 22 const taskIds = new Set<string>(); 23 for (const rel of relations) { 24 taskIds.add(rel.sourceTaskId); 25 taskIds.add(rel.targetTaskId); 26 } 27 28 const tasks = new Map< 29 string, 30 { 31 id: string; 32 title: string; 33 status: string; 34 priority: string | null; 35 number: number | null; 36 projectId: string; 37 userId: string | null; 38 assigneeName: string | null; 39 } 40 >(); 41 42 if (taskIds.size > 0) { 43 const taskRows = await db 44 .select({ 45 id: taskTable.id, 46 title: taskTable.title, 47 status: taskTable.status, 48 priority: taskTable.priority, 49 number: taskTable.number, 50 projectId: taskTable.projectId, 51 userId: taskTable.userId, 52 assigneeName: userTable.name, 53 }) 54 .from(taskTable) 55 .leftJoin(userTable, eq(taskTable.userId, userTable.id)) 56 .where(inArray(taskTable.id, [...taskIds])); 57 58 for (const task of taskRows) { 59 tasks.set(task.id, task); 60 } 61 } 62 63 return relations.map((rel) => ({ 64 ...rel, 65 sourceTask: tasks.get(rel.sourceTaskId) ?? null, 66 targetTask: tasks.get(rel.targetTaskId) ?? null, 67 })); 68} 69 70export default getTaskRelations;