Open4
[Astro] Prismaの使い方

AstroからMongoDBに接続するにはPrisma経由にするのが良いようだ。
初期処理としてPrismaClientを生成する。どこで生成するのがいいか。
何回も生成しないでインスタンスを使い回せるのがいい。

DB接続クラスのベースクラスでやっとくと一度の実行だけで済む。
import { PrismaClient } from '@prisma/client'
export default class BaseDB {
static prisma: PrismaClient = new PrismaClient()
}

このようにサブクラスにして使う。
import type { User } from '@prisma/client'
import BaseDB from './base'
class UserDB extends BaseDB {
async getUserByEmail(email: string): Promise<User | null> {
try {
const user = await BaseDB.prisma.user.findUnique({
where: {
email: email
}
})
return user
} catch (err) {
console.error(err)
return null
}
}
}
export default new UserDB()
import { UserDB } from '@/server/db'
const user = await UserDB.getUserByEmail(email)

型はPrismaのスキーマ定義がそのまま使える。
import type { User } from '@prisma/client'