import { defineEventHandler, 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) // 如果是 posts 表,添加标题验证 if (table === 'posts') { const originalValidateCreate = service['validateCreate'] service['validateCreate'] = async (data: any) => { if (!data.title) { const error = new Error('Title is required') ;(error as any).statusCode = 400 throw error } await originalValidateCreate.call(service, data) } } const { create } = createCrudHandlers(service) return await create(event) })