28 lines
1023 B
TypeScript
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);
|
|
},
|
|
});
|