🦔

【Convex】NextJs14 と Convex【#13 Convex Query】

2024/04/14に公開

【#13 Convex Query】

YouTube: https://youtu.be/H-k5ujPaKNo

https://youtu.be/H-k5ujPaKNo

今回は前回スキーマで定義したカードの一覧を取得する関数を作成します。

https://docs.convex.dev/vector-search#using-a-separate-table-to-store-vectors

convex/schema.ts
import { v } from "convex/values";
import { defineSchema, defineTable } from "convex/server";

export default defineSchema({
  cards: defineTable({
    title: v.string(),
    orgId: v.string(),
    authorId: v.string(),
    cardType: v.string(),
    imageUrl: v.string(),
  }).index("by_org", ["orgId"]),
});

カードの一覧取得用に「convex」フォルダ内に
「cards.ts」ファイルを作成します。

convex/cards.ts
import { v } from "convex/values";

import { query } from "./_generated/server";

export const get = query({
  args: {
    orgId: v.string(),
  },
  handler: async (ctx, args) => {
    const identity = await ctx.auth.getUserIdentity();

    if (!identity) {
      throw new Error("Unauthorized");
    }

    const cards = await ctx.db
      .query("cards")
      .withIndex("by_org", (q) => q.eq("orgId", args.orgId))
      .order("desc")
      .collect();

    return cards;
  },
});

作成した関数の使用方法

https://docs.convex.dev/functions/query-functions#calling-queries-from-clients

NextJSのサーバコンポーネントでの使用例

https://docs.convex.dev/client/react/nextjs/server-rendering#using-convex-to-render-server-components

Discussion