diff --git a/app/admin/review/page.tsx b/app/admin/review/page.tsx index ad5b201..5228caa 100644 --- a/app/admin/review/page.tsx +++ b/app/admin/review/page.tsx @@ -15,7 +15,7 @@ import { api } from "@/convex/_generated/api"; export default function AdminReviewPage() { const isAdmin = useQuery(api.users.isAdmin); - const maps = useQuery(api.maps.getMaps, { isReviewed: false }); + const maps = useQuery(api.maps.getUnreviewedMaps); const adminApprovalMutation = useMutation(api.maps.approveMap); const adminRejectMapMutation = useMutation(api.maps.rejectMap); diff --git a/convex/maps.ts b/convex/maps.ts index 9841252..ddafb1f 100644 --- a/convex/maps.ts +++ b/convex/maps.ts @@ -191,38 +191,23 @@ export const seedMaps = internalMutation({ }, }); + +export const getUnreviewedMaps = adminQueryBuilder({ + handler: async (ctx) => { + return await ctx.db + .query("maps") + .withIndex("by_isReviewed_level", (q) => q.eq("isReviewed", false)) + .collect(); + }, +}); + export const getMaps = query({ args: { - isReviewed: v.optional(v.boolean()), }, handler: async (ctx, args) => { - if (args.isReviewed !== undefined) { - // todo: take this out into a helper function - // if a manual query is made, check if the user is an admin - - const userId = await getAuthUserId(ctx); - if (userId === null) { - return null; - } - - const admin = await ctx.db - .query("admins") - .withIndex("by_userId", (q) => q.eq("userId", userId)) - .first(); - - if (admin) { return await ctx.db - .query("maps") - .filter((q) => q.eq(q.field("isReviewed"), args.isReviewed)) - .collect(); - } else { - return null; - } - } - - return await ctx.db .query("maps") - .filter((q) => q.eq(q.field("isReviewed"), true)) + .withIndex("by_isReviewed_level", (q) => q.eq("isReviewed", true)) .collect(); }, }); diff --git a/convex/schema.ts b/convex/schema.ts index 0afd5ab..0c26702 100644 --- a/convex/schema.ts +++ b/convex/schema.ts @@ -16,7 +16,8 @@ export default defineSchema({ grid: v.array(v.array(v.string())), submittedBy: v.optional(v.id("users")), isReviewed: v.boolean(), - }).index("by_level", ["level"]), + }).index("by_level", ["level"]) + .index("by_isReviewed_level", ["isReviewed", "level"]), scores: defineTable({ modelId: v.string(), promptId: v.optional(v.id("prompts")),