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) })