Files
zopu-code/packages/backend/convex/artifacts.ts
T
2026-08-03 18:13:33 +05:30

28 lines
1023 B
TypeScript

import { v } from "convex/values";
import type { Doc } from "./_generated/dataModel";
import { query } from "./_generated/server";
import { requireArtifactMember, requireWorkMember } from "./authz";
export const get = query({
args: { artifactId: v.id("artifacts") },
handler: async (ctx, args): Promise<Doc<"artifacts"> | null> => {
await requireArtifactMember(ctx, args.artifactId);
return await ctx.db.get(args.artifactId);
},
});
export const listForWork = query({
args: { limit: v.optional(v.number()), workId: v.id("works") },
handler: async (ctx, args): Promise<readonly Doc<"artifacts">[]> => {
const { organizationId } = await requireWorkMember(ctx, args.workId);
const limit = Math.min(Math.max(Math.floor(args.limit ?? 50), 1), 100);
return await ctx.db
.query("artifacts")
.withIndex("by_workId_and_createdAt", (q) => q.eq("workId", args.workId))
.filter((q) => q.eq(q.field("organizationId"), organizationId))
.order("desc")
.take(limit);
},
});