UNPKG

@api-buddy/prisma

Version:

Prisma database utilities for API Buddy

33 lines (31 loc) 2.81 kB
import { createRequire } from 'node:module'; const require = createRequire(import.meta.url); import{PrismaClient as C}from"@prisma/client";import{writeFileSync as y,mkdirSync as m,existsSync as u}from"fs";import{join as p}from"path";var o=class{constructor(t){this.prisma=t}getModelNames(){return[]}getModelFields(t){let r=t;return this.prisma[r]?["id","createdAt","updatedAt"]:[]}generateRouteContent(t,r){let e=t.toLowerCase(),i=`${e}Id`;return`// Generated by @api-buddy/prisma import { NextResponse } from 'next/server'; import { prisma } from '@/lib/prisma'; // GET /api/${e} export async function GET() { try { const items = await prisma.${e}.findMany(); return NextResponse.json(items); } catch (error) { return NextResponse.json( { error: 'Failed to fetch ${e}s' }, { status: 500 } ); } } // POST /api/${e} export async function POST(request: Request) { try { const data = await request.json(); const item = await prisma.${e}.create({ data }); return NextResponse.json(item, { status: 201 }); } catch (error) { return NextResponse.json( { error: 'Failed to create ${e}' }, { status: 500 } ); } } `}async generateCRUDRoutes(t){let{outputDir:r,models:e,exclude:i=[],auth:P}=t;u(r)||m(r,{recursive:!0});let g=(e||this.getModelNames()).filter(n=>!i.includes(n));for(let n of g){let a=String(n),h=this.getModelFields(a),f=this.generateRouteContent(a,h),d=p(r,a.toLowerCase(),"route.ts"),l=p(r,a.toLowerCase());u(l)||m(l,{recursive:!0}),y(d,f),console.log(`\u2705 Generated CRUD routes for ${n} at ${d}`)}}};async function v(s,t){return new o(s).generateCRUDRoutes(t)}export*from"@prisma/client";var c=class{prisma;logger;crud;$connect;$disconnect;constructor(t){return this.prisma=new C,this.logger=t||{info:r=>console.log(`[Prisma] ${r}`),error:(r,e)=>{let i=e?`${r}: ${e.message||e}`:r;console.error(`[Prisma] ${i}`),e!=null&&e.stack&&console.error(e.stack)}},this.crud=new o(this.prisma),this.$connect=this.prisma.$connect.bind(this.prisma),this.$disconnect=this.prisma.$disconnect.bind(this.prisma),new Proxy(this,{get:(r,e)=>e in r?r[e]:this.prisma[e]})}async connect(){try{await this.$connect(),this.logger.info("Successfully connected to the database")}catch(t){throw this.logger.error("Failed to connect to the database",t),t}}async disconnect(){try{await this.$disconnect(),this.logger.info("Successfully disconnected from the database")}catch(t){this.logger.error("Error disconnecting from the database",t)}}async generateCRUDRoutes(t){return this.crud.generateCRUDRoutes({outputDir:t.outputDir,models:t.models,exclude:t.exclude,auth:t.auth})}};function U(s){return new c(s)}var F=c;export{o as CRUDGenerator,c as PrismaService,U as createPrismaService,F as default,v as generateCRUDRoutes}; //# sourceMappingURL=index.mjs.map