@djs-commands/adapter-prisma
v2.0.1
Published
Prisma Storage adapter for djs-commands — persistent state via Prisma Client
Downloads
208
Maintainers
Readme
@djs-commands/adapter-prisma
Prisma Storage adapter for @djs-commands/core.
Persists the framework's three built-in models — guild prefixes, disabled commands, and channel locks — using a Prisma Client you've already generated for your own app.
📘 Full walk-through: https://djscommands.deoxy.dev/adapter-cookbook#prisma
Install
bun add @djs-commands/core @djs-commands/adapter-prisma @prisma/client
bun add -d prismaUsage
Add the framework's models to your
schema.prisma. Copy the fragment below, or import the schema strings:model GuildPrefix { guildId String @id @map("guild_id") prefix String @@map("guild_prefix") } model DisabledCommand { guildId String @map("guild_id") commandName String @map("command_name") @@id([guildId, commandName]) @@map("disabled_commands") } model ChannelLock { guildId String @map("guild_id") commandName String @map("command_name") channelId String @map("channel_id") @@id([guildId, commandName, channelId]) @@map("channel_locks") }Programmatic option (e.g. for codegen / docs):
import { GUILD_PREFIX_PRISMA_MODEL, DISABLED_COMMANDS_PRISMA_MODEL, CHANNEL_LOCKS_PRISMA_MODEL, } from "@djs-commands/adapter-prisma";Run a migration so the tables exist:
bunx prisma migrate dev --name add_djs_commands bunx prisma generateWire it up:
import { prismaStorage } from "@djs-commands/adapter-prisma"; import { PrismaClient } from "@prisma/client"; const prisma = new PrismaClient(); createCommandHandler({ client, commands: [/* ... */], storage: prismaStorage(prisma), });
The dispatcher reads/writes guild_prefix, disabled_commands, and channel_locks automatically — you don't write any code for the framework models.
Bring-your-own-delegates
If you've renamed the models in your schema, pass the delegates explicitly:
import { prismaStorage } from "@djs-commands/adapter-prisma";
prismaStorage(prisma, {
delegates: { guildPrefix: prisma.myCustomModel },
});Local development
Spin up Postgres for testing:
docker run --rm -p 5432:5432 -e POSTGRES_PASSWORD=postgres postgres:16
DATABASE_URL=postgres://postgres:postgres@localhost:5432/postgres bunx prisma migrate dev
DATABASE_URL=postgres://postgres:postgres@localhost:5432/postgres bun testThe integration test suite skips cleanly if DATABASE_URL is unset, @prisma/client hasn't been generated, or Postgres is unreachable — CI without Postgres will not fail.
