Updated Readme files
This commit is contained in:
135
pkg/writers/prisma/README.md
Normal file
135
pkg/writers/prisma/README.md
Normal file
@@ -0,0 +1,135 @@
|
||||
# Prisma Writer
|
||||
|
||||
Generates Prisma schema files from database schema information.
|
||||
|
||||
## Overview
|
||||
|
||||
The Prisma Writer converts RelSpec's internal database model representation into Prisma schema language (`.prisma` files), complete with models, fields, relationships, and attributes.
|
||||
|
||||
## Features
|
||||
|
||||
- Generates Prisma schema syntax
|
||||
- Creates model definitions with proper field types
|
||||
- Adds Prisma attributes (@id, @unique, @default, etc.)
|
||||
- Generates relationship fields
|
||||
- Includes datasource and generator configurations
|
||||
- Maps table/column names with @map and @@map
|
||||
|
||||
## Usage
|
||||
|
||||
### Basic Example
|
||||
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"git.warky.dev/wdevs/relspecgo/pkg/models"
|
||||
"git.warky.dev/wdevs/relspecgo/pkg/writers"
|
||||
"git.warky.dev/wdevs/relspecgo/pkg/writers/prisma"
|
||||
)
|
||||
|
||||
func main() {
|
||||
options := &writers.WriterOptions{
|
||||
OutputPath: "schema.prisma",
|
||||
Metadata: map[string]interface{}{
|
||||
"datasource_provider": "postgresql",
|
||||
},
|
||||
}
|
||||
|
||||
writer := prisma.NewWriter(options)
|
||||
err := writer.WriteDatabase(db)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### CLI Examples
|
||||
|
||||
```bash
|
||||
# Generate Prisma schema from PostgreSQL database
|
||||
relspec --input pgsql \
|
||||
--conn "postgres://localhost/mydb" \
|
||||
--output prisma \
|
||||
--out-file schema.prisma
|
||||
|
||||
# Convert GORM models to Prisma
|
||||
relspec --input gorm --in-file models.go --output prisma --out-file schema.prisma
|
||||
|
||||
# Convert JSON to Prisma schema
|
||||
relspec --input json --in-file database.json --output prisma --out-file prisma/schema.prisma
|
||||
```
|
||||
|
||||
## Generated Code Example
|
||||
|
||||
```prisma
|
||||
datasource db {
|
||||
provider = "postgresql"
|
||||
url = env("DATABASE_URL")
|
||||
}
|
||||
|
||||
generator client {
|
||||
provider = "prisma-client-js"
|
||||
}
|
||||
|
||||
model User {
|
||||
id Int @id @default(autoincrement())
|
||||
username String @unique @db.VarChar(50)
|
||||
email String @db.VarChar(100)
|
||||
bio String? @db.Text
|
||||
createdAt DateTime @default(now()) @map("created_at")
|
||||
|
||||
posts Post[]
|
||||
|
||||
@@map("users")
|
||||
}
|
||||
|
||||
model Post {
|
||||
id Int @id @default(autoincrement())
|
||||
userId Int @map("user_id")
|
||||
title String @db.VarChar(200)
|
||||
content String? @db.Text
|
||||
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@map("posts")
|
||||
}
|
||||
```
|
||||
|
||||
## Supported Prisma Attributes
|
||||
|
||||
### Field Attributes
|
||||
- `@id` - Primary key
|
||||
- `@unique` - Unique constraint
|
||||
- `@default()` - Default value
|
||||
- `@map()` - Column name mapping
|
||||
- `@db.*` - Database-specific types
|
||||
- `@relation()` - Relationship definition
|
||||
|
||||
### Model Attributes
|
||||
- `@@map()` - Table name mapping
|
||||
- `@@unique()` - Composite unique constraints
|
||||
- `@@index()` - Index definitions
|
||||
- `@@id()` - Composite primary keys
|
||||
|
||||
## Type Mapping
|
||||
|
||||
| SQL Type | Prisma Type | Database Type |
|
||||
|----------|-------------|---------------|
|
||||
| bigint | Int | @db.BigInt |
|
||||
| integer | Int | - |
|
||||
| varchar(n) | String | @db.VarChar(n) |
|
||||
| text | String | @db.Text |
|
||||
| boolean | Boolean | - |
|
||||
| timestamp | DateTime | @db.Timestamp |
|
||||
| uuid | String | @db.Uuid |
|
||||
| json | Json | - |
|
||||
|
||||
## Notes
|
||||
|
||||
- Model names are PascalCase (e.g., `User`, `Post`)
|
||||
- Field names are camelCase with `@map` for snake_case columns
|
||||
- Table names use `@@map` when different from model name
|
||||
- Nullable fields are marked with `?`
|
||||
- Relationship fields are automatically generated
|
||||
- Datasource provider defaults to `postgresql`
|
||||
Reference in New Issue
Block a user