Files
metabuilder/docs/database/PRISMA_SETUP.md
JohnDoe6345789 3537211368 feat(todos): Add comprehensive TODO lists for various project areas
- Created TODO files for Testing, DBAL, Frontend, Packages, Database, and Lua Scripting.
- Updated README with a quick reference table for all TODO files and their priorities.
- Added specific tasks for improving testing coverage, implementing DBAL features, enhancing frontend components, and refining package management.
- Included documentation tasks to ensure thorough coverage and clarity across all areas.
- Implemented initial unit tests for the useAuth hook and improved password generation logic.
- Enhanced package loader functionality to support modular package seed data retrieval.
- Updated page renderer to include public role in permission checks.
- Added comments for future unit tests in workflow engine and other critical areas.
2025-12-25 15:47:15 +00:00

3.1 KiB

Prisma Database Setup

The MetaBuilder project now uses Prisma as its database layer, replacing the previous spark.kv key-value store.

Quick Start

1. Install Dependencies

npm install

2. Set up Environment Variables

Create a .env file in the root directory:

DATABASE_URL="file:./dev.db"

3. Generate Prisma Client

npm run db:generate

4. Create/Update Database

npm run db:push

5. Start Development Server

npm run dev

Database Schema

The Prisma schema is defined in prisma/schema.prisma and includes:

  • Users: User accounts, credentials, and authentication
  • Content: Workflows, Lua scripts, pages, and data schemas
  • Components: UI component hierarchy and configurations
  • Packages: Installed packages and their data
  • Tenancy: Multi-tenant support and power transfers
  • Configuration: SMTP, CSS classes, dropdown configs, and system settings

npm Scripts

  • npm run db:generate - Generate Prisma Client from schema
  • npm run db:push - Push schema changes to database (dev)
  • npm run db:migrate - Run migrations (production)

Database Files

  • prisma/schema.prisma - Database schema definition
  • prisma/migrations/ - Migration history
  • dev.db - SQLite database file (gitignored)
  • src/lib/prisma.ts - Prisma client singleton
  • src/lib/database.ts - Database access layer

Switching Database Providers

  1. Update prisma/schema.prisma:
datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}
  1. Update .env:
DATABASE_URL="postgresql://user:password@localhost:5432/metabuilder"
  1. Run:
npm run db:push

MySQL

  1. Update prisma/schema.prisma:
datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
}
  1. Update .env:
DATABASE_URL="mysql://user:password@localhost:3306/metabuilder"
  1. Run:
npm run db:push

Data Migration

If you have existing data from the old spark.kv system:

  1. Export data (before migration):
const jsonData = await Database.exportDatabase()
// Save to file
  1. After Prisma setup, import:
await Database.importDatabase(jsonData)

Troubleshooting

Error: Cannot find module '@prisma/client'

Run: npm run db:generate

Error: Database file doesn't exist

Run: npm run db:push

Error: Database locked (SQLite)

Kill any processes using the database or restart your computer.

Migration conflicts

Delete prisma/migrations/ and dev.db, then run npm run db:push

Production Deployment

  1. Use PostgreSQL or MySQL (not SQLite)
  2. Set DATABASE_URL environment variable
  3. Run migrations: npm run db:migrate
  4. Deploy application

Additional Resources