Files
metabuilder/docs/database/PRISMA_SETUP.md

142 lines
3.2 KiB
Markdown

# 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
```bash
npm install
```
### 2. Set up Environment Variables
Create a `.env` file in the root directory:
```env
DATABASE_URL="file:./dev.db"
```
### 3. Generate Prisma Client
```bash
npm run db:generate
```
### 4. Create/Update Database
```bash
npm run db:push
```
### 5. Start Development Server
```bash
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
### PostgreSQL (Recommended for Production)
1. Update `prisma/schema.prisma`:
```prisma
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
```
2. Update `.env`:
```env
DATABASE_URL="postgresql://user:password@localhost:5432/metabuilder"
```
3. Run:
```bash
npm run db:push
```
### MySQL
1. Update `prisma/schema.prisma`:
```prisma
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
```
2. Update `.env`:
```env
DATABASE_URL="mysql://user:password@localhost:3306/metabuilder"
```
3. Run:
```bash
npm run db:push
```
## Data Migration
If you have existing data from the old `spark.kv` system:
1. Export data (before migration):
```typescript
const jsonData = await Database.exportDatabase()
// Save to file
```
2. After Prisma setup, import:
```typescript
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
- [Prisma Documentation](https://www.prisma.io/docs)
- [Prisma Schema Reference](https://www.prisma.io/docs/reference/api-reference/prisma-schema-reference)
TODO: The migration guide link should be relative to docs/database (remove ./docs/).
- [Migration Guide](./docs/PRISMA_MIGRATION.md)