feat: add bun-fullstack agent and update skills
This commit is contained in:
93
.agent/skills/tech-stack/elysiajs/integrations/prisma.md
Normal file
93
.agent/skills/tech-stack/elysiajs/integrations/prisma.md
Normal file
@@ -0,0 +1,93 @@
|
||||
|
||||
# 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
|
||||
```bash
|
||||
bun add @prisma/client prismabox && \
|
||||
bun add -d prisma
|
||||
```
|
||||
|
||||
## Prisma Schema
|
||||
Add `prismabox` generator:
|
||||
```prisma
|
||||
// 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:
|
||||
- `User` → `generated/prismabox/User.ts`
|
||||
- `Post` → `generated/prismabox/Post.ts`
|
||||
|
||||
## Using Generated Models
|
||||
```typescript
|
||||
// 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.
|
||||
Reference in New Issue
Block a user