kaneo (minimalist kanban) fork to experiment adding a tangled integration
github.com/usekaneo/kaneo
1import { and, asc, eq } from "drizzle-orm";
2import db from "../../../database";
3import { columnTable, workflowRuleTable } from "../../../database/schema";
4
5export async function resolveTargetStatus(
6 projectId: string,
7 eventType: string,
8 fallbackStatus: string,
9): Promise<string> {
10 const projectColumns = await db
11 .select({
12 id: columnTable.id,
13 slug: columnTable.slug,
14 })
15 .from(columnTable)
16 .where(eq(columnTable.projectId, projectId))
17 .orderBy(asc(columnTable.position));
18
19 if (projectColumns.length === 0) {
20 return fallbackStatus;
21 }
22
23 const rule = await db.query.workflowRuleTable.findFirst({
24 where: and(
25 eq(workflowRuleTable.projectId, projectId),
26 eq(workflowRuleTable.integrationType, "github"),
27 eq(workflowRuleTable.eventType, eventType),
28 ),
29 });
30
31 if (rule) {
32 const mappedColumn = projectColumns.find(
33 (column) => column.id === rule.columnId,
34 );
35 if (mappedColumn) {
36 return mappedColumn.slug;
37 }
38 }
39
40 const fallbackColumn = projectColumns.find(
41 (column) => column.slug === fallbackStatus,
42 );
43 if (fallbackColumn) {
44 return fallbackColumn.slug;
45 }
46
47 return projectColumns[0]?.slug ?? fallbackStatus;
48}