init6
This commit is contained in:
42
server/api/[table]/index.get.ts
Normal file
42
server/api/[table]/index.get.ts
Normal file
@@ -0,0 +1,42 @@
|
||||
import { defineEventHandler, getQuery, getRouterParam, createError } from 'h3'
|
||||
import { prisma } from '../../lib/prisma'
|
||||
import { BaseCrudService } from '../../lib/crud-service'
|
||||
import { createCrudHandlers } from '../../lib/crud-handler'
|
||||
import { Prisma } from '@prisma/client'
|
||||
|
||||
export default defineEventHandler(async event => {
|
||||
const table = getRouterParam(event, 'table')?.toLowerCase()
|
||||
|
||||
if (!table) {
|
||||
throw createError({
|
||||
statusCode: 400,
|
||||
statusMessage: 'Table name is required',
|
||||
})
|
||||
}
|
||||
|
||||
// 将表名转换为 PascalCase 模型名(首字母大写,复数转单数)
|
||||
let modelName = table
|
||||
// 简单的复数转单数逻辑(去掉结尾的s)
|
||||
if (modelName.endsWith('s')) {
|
||||
modelName = modelName.slice(0, -1)
|
||||
}
|
||||
modelName = modelName.charAt(0).toUpperCase() + modelName.slice(1)
|
||||
|
||||
// 验证表名是否存在于 Prisma 模型中
|
||||
if (!prisma[modelName as keyof typeof prisma]) {
|
||||
throw createError({
|
||||
statusCode: 404,
|
||||
statusMessage: 'Table not found or not supported',
|
||||
})
|
||||
}
|
||||
|
||||
// 直接实例化 BaseCrudService,传入动态表名
|
||||
const service = new BaseCrudService(prisma, modelName as Prisma.ModelName, {
|
||||
searchableFields: [],
|
||||
defaultOrderBy: 'createdAt',
|
||||
defaultOrderDirection: 'desc',
|
||||
})
|
||||
|
||||
const { list } = createCrudHandlers(service)
|
||||
return await list(event)
|
||||
})
|
||||
Reference in New Issue
Block a user