@neolith/database
v1.0.39
Published
Prisma database client and schema for Genesis App
Readme
@genesis/database
Prisma database client and schema for the Genesis App. Provides a singleton client optimized for serverless environments with connection pooling.
Installation
npm install @genesis/databaseSetup
1. Environment Variables
Create a .env file in the root of your project:
DATABASE_URL="postgresql://user:password@localhost:5432/genesis?schema=public"For production with connection pooling (e.g., PgBouncer):
DATABASE_URL="postgresql://user:[email protected]:6543/genesis?pgbouncer=true"2. Generate Prisma Client
npm run db:generateMigration Commands
Development
Create and apply migrations during development:
# Create a new migration
npm run db:migrate
# Apply migrations without creating new ones
npx prisma migrate dev --name <migration-name>
# Reset the database (destructive!)
npx prisma migrate resetProduction
Deploy migrations to production:
npm run db:migrate:deployDatabase Push (Prototyping)
Push schema changes directly without creating migrations (useful for prototyping):
npm run db:pushClient Usage Examples
Basic Usage
import { prisma } from '@genesis/database';
// Find all users
const users = await prisma.user.findMany();
// Create a user
const user = await prisma.user.create({
data: {
email: '[email protected]',
name: 'John Doe',
},
});
// Find user by email
const existingUser = await prisma.user.findUnique({
where: { email: '[email protected]' },
});With Type Safety
import { prisma, type Prisma } from '@genesis/database';
// Type-safe input
const userData: Prisma.UserCreateInput = {
email: '[email protected]',
name: 'John Doe',
role: 'MEMBER',
};
const user = await prisma.user.create({ data: userData });Transactions
import { prisma } from '@genesis/database';
const result = await prisma.$transaction(async tx => {
const user = await tx.user.create({
data: { email: '[email protected]' },
});
// More operations within the same transaction
// ...
return user;
});Health Check
import { healthCheck } from '@genesis/database';
const status = await healthCheck();
if (status.connected) {
console.log(`Database connected (latency: ${status.latencyMs}ms)`);
} else {
console.error(`Database connection failed: ${status.error}`);
}Connection Management
import { connect, disconnect } from '@genesis/database';
// Pre-warm connection (useful for serverless cold starts)
await connect();
// Graceful shutdown
process.on('SIGTERM', async () => {
await disconnect();
process.exit(0);
});Seeding Instructions
1. Create Seed File
Create prisma/seed.ts:
import { prisma } from '../src';
async function main() {
// Clear existing data (optional)
await prisma.user.deleteMany();
// Seed users
const adminUser = await prisma.user.create({
data: {
email: '[email protected]',
name: 'Admin User',
role: 'ADMIN',
},
});
console.log('Seeded admin user:', adminUser);
}
main()
.catch(e => {
console.error(e);
process.exit(1);
})
.finally(async () => {
await prisma.$disconnect();
});2. Configure package.json
The db:seed script is already configured in package.json:
{
"prisma": {
"seed": "ts-node prisma/seed.ts"
}
}3. Run Seeding
# Run seed manually
npm run db:seed
# Seed automatically after migrations
npx prisma migrate resetPrisma Studio
Launch the visual database editor:
npm run db:studioThis opens a web interface at http://localhost:5555 for browsing and editing data.
Serverless Optimization
This package is optimized for serverless environments (Vercel, AWS Lambda, etc.):
- Connection Pooling: Automatically configured connection limits
- Singleton Pattern: Prevents connection pool exhaustion during hot reloads
- Pre-warming: Use
connect()to warm up connections before handling requests
Recommended Configuration for Vercel
DATABASE_URL="postgresql://user:pass@host:5432/db?connection_limit=5&pool_timeout=20"Using Prisma Accelerate
For better serverless performance, consider using Prisma Accelerate:
DATABASE_URL="prisma://accelerate.prisma-data.net/?api_key=YOUR_API_KEY"Development
# Build the package
npm run build
# Generate Prisma client
npm run db:generate
# Open Prisma Studio
npm run db:studioLicense
MIT
