Files
agent/.agent/skills/tech-stack/elysiajs/integrations/prisma.md

1.9 KiB

Prisma Integration

Elysia + Prisma integration guide

What It Is

Type-safe ORM. Generate Elysia validation models from Prisma schema via prismabox.

Flow

Prisma → prismabox → Elysia validation → OpenAPI + Eden Treaty

Installation

bun add @prisma/client prismabox && \
bun add -d prisma

Prisma Schema

Add prismabox generator:

// prisma/schema.prisma
generator client {
  provider = "prisma-client"
  output   = "../generated/prisma"
}

datasource db {
  provider = "sqlite"
  url      = env("DATABASE_URL")
}

generator prismabox {
  provider = "prismabox"
  typeboxImportDependencyName = "elysia"
  typeboxImportVariableName = "t"
  inputModel = true
  output   = "../generated/prismabox"
}

model User {
  id    String  @id @default(cuid())
  email String  @unique
  name  String?
  posts Post[]
}

model Post {
  id        String  @id @default(cuid())
  title     String
  content   String?
  published Boolean @default(false)
  author    User    @relation(fields: [authorId], references: [id])
  authorId  String
}

Generates:

  • Usergenerated/prismabox/User.ts
  • Postgenerated/prismabox/Post.ts

Using Generated Models

// src/index.ts
import { Elysia, t } from 'elysia'
import { PrismaClient } from '../generated/prisma'
import { UserPlain, UserPlainInputCreate } from '../generated/prismabox/User'

const prisma = new PrismaClient()

new Elysia()
  .put('/', async ({ body }) =>
    prisma.user.create({ data: body }), {
      body: UserPlainInputCreate,
      response: UserPlain
    }
  )
  .get('/id/:id', async ({ params: { id }, status }) => {
    const user = await prisma.user.findUnique({ where: { id } })
    
    if (!user) return status(404, 'User not found')
    
    return user
  }, {
    response: {
      200: UserPlain,
      404: t.String()
    }
  })
  .listen(3000)

Reuses DB schema in Elysia validation models.