Skip to content

Commit 13f28af

Browse files
committed
Prisma endpoint generation added
1 parent cdb504f commit 13f28af

File tree

2 files changed

+58
-0
lines changed

2 files changed

+58
-0
lines changed

src/templates/apiWithPrisma.ts

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import { PrismaClient } from '@prisma/client'
2+
const prisma = new PrismaClient()
3+
4+
export default defineEventHandler(async event => {
5+
if (event.node.req.method == 'GET') {
6+
7+
if (event.node.req.query.id) {
8+
const ${name} = await prisma.${name}.findUnique({ where: { id: event.node.req.query.id } })
9+
return ${name}
10+
}
11+
12+
const ${name} = await prisma.${name}.findMany()
13+
return ${name}
14+
}
15+
16+
if (event.node.req.method == 'POST') {
17+
const data = await readBody(event)
18+
const ${name} = await prisma.${name}.create({ data })
19+
if (!${name}) {
20+
throw createError({ status: 401, message: '${name} creation error' })
21+
}
22+
return ${name}
23+
}
24+
25+
if (event.node.req.method == 'PATCH') {
26+
const data = await readBody(event)
27+
const ${name} = await prisma.${name}.update({ where:{ id:d ata.id }, data })
28+
if (!${name}) {
29+
throw createError({ status: 401, message: '${name} patch error' })
30+
}
31+
return ${name}
32+
}
33+
34+
if (event.node.req.method == 'DELETE') {
35+
const ${name} = await prisma.${name}.delete({ where:{ id:d ata.id }})
36+
if (!${name}) {
37+
throw createError({ status: 401, message: '${name} delete error' })
38+
}
39+
return ${name}
40+
}
41+
})

src/utils/templates.ts

+17
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
import { readFileSync } from 'node:fs'
2+
import { join } from 'pathe'
3+
14
import { upperFirst } from 'scule'
25

36
interface TemplateOptions {
@@ -29,6 +32,19 @@ export default defineEventHandler((event) => {
2932
`,
3033
})
3134

35+
const apiWithPrisma: Template = ({ name, args }) => {
36+
let contents = readFileSync(
37+
join(__dirname, '../templates/apiWithPrisma.ts'),
38+
'utf-8',
39+
)
40+
contents = contents.replace(/\$\{name\}/g, name)
41+
42+
return {
43+
path: `server/api/${name}${applySuffix(args, httpMethods, 'method')}.ts`,
44+
contents,
45+
}
46+
}
47+
3248
const plugin: Template = ({ name, args }) => ({
3349
path: `plugins/${name}${applySuffix(args, ['client', 'server'], 'mode')}.ts`,
3450
contents: `
@@ -109,6 +125,7 @@ const page: Template = ({ name }) => ({
109125

110126
export const templates = {
111127
api,
128+
apiWithPrisma,
112129
plugin,
113130
component,
114131
composable,

0 commit comments

Comments
 (0)