kaneo (minimalist kanban) fork to experiment adding a tangled integration github.com/usekaneo/kaneo
at main 65 lines 1.7 kB view raw
1import { eq } from "drizzle-orm"; 2import { Hono } from "hono"; 3import { describeRoute, resolver, validator } from "hono-openapi"; 4import * as v from "valibot"; 5import db from "../database"; 6import { externalLinkTable } from "../database/schema"; 7import { workspaceAccess } from "../utils/workspace-access-middleware"; 8 9const externalLinkSchema = v.object({ 10 id: v.string(), 11 taskId: v.string(), 12 integrationId: v.string(), 13 resourceType: v.string(), 14 externalId: v.string(), 15 url: v.string(), 16 title: v.nullable(v.string()), 17 metadata: v.any(), 18 createdAt: v.date(), 19 updatedAt: v.date(), 20}); 21 22const externalLink = new Hono<{ 23 Variables: { 24 userId: string; 25 workspaceId: string; 26 }; 27}>().get( 28 "/task/:taskId", 29 describeRoute({ 30 operationId: "getExternalLinksByTask", 31 tags: ["External Links"], 32 description: "Get all external links for a task", 33 responses: { 34 200: { 35 description: "External links for the task", 36 content: { 37 "application/json": { 38 schema: resolver(v.array(externalLinkSchema)), 39 }, 40 }, 41 }, 42 }, 43 }), 44 validator("param", v.object({ taskId: v.string() })), 45 workspaceAccess.fromTaskId("taskId"), 46 async (c) => { 47 const { taskId } = c.req.valid("param"); 48 49 const links = await db.query.externalLinkTable.findMany({ 50 where: eq(externalLinkTable.taskId, taskId), 51 with: { 52 integration: true, 53 }, 54 }); 55 56 const formattedLinks = links.map((link) => ({ 57 ...link, 58 metadata: link.metadata ? JSON.parse(link.metadata) : null, 59 })); 60 61 return c.json(formattedLinks); 62 }, 63); 64 65export default externalLink;