Updated Readme files
This commit is contained in:
120
pkg/writers/drizzle/README.md
Normal file
120
pkg/writers/drizzle/README.md
Normal file
@@ -0,0 +1,120 @@
|
||||
# Drizzle Writer
|
||||
|
||||
Generates TypeScript/JavaScript files with Drizzle ORM schema definitions from database schema information.
|
||||
|
||||
## Overview
|
||||
|
||||
The Drizzle Writer converts RelSpec's internal database model representation into TypeScript source code with Drizzle ORM schema definitions, including tables, columns, relationships, and constraints.
|
||||
|
||||
## Features
|
||||
|
||||
- Generates Drizzle-compatible TypeScript schema
|
||||
- Supports PostgreSQL and MySQL schemas
|
||||
- Creates table definitions with proper column types
|
||||
- Generates relationship definitions
|
||||
- Handles constraints and indexes
|
||||
- Outputs formatted TypeScript code
|
||||
|
||||
## 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/drizzle"
|
||||
)
|
||||
|
||||
func main() {
|
||||
options := &writers.WriterOptions{
|
||||
OutputPath: "schema.ts",
|
||||
Metadata: map[string]interface{}{
|
||||
"database_type": "postgresql", // or "mysql"
|
||||
},
|
||||
}
|
||||
|
||||
writer := drizzle.NewWriter(options)
|
||||
err := writer.WriteDatabase(db)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### CLI Examples
|
||||
|
||||
```bash
|
||||
# Generate Drizzle schema from PostgreSQL database
|
||||
relspec --input pgsql \
|
||||
--conn "postgres://localhost/mydb" \
|
||||
--output drizzle \
|
||||
--out-file schema.ts
|
||||
|
||||
# Convert GORM models to Drizzle
|
||||
relspec --input gorm --in-file models.go --output drizzle --out-file schema.ts
|
||||
|
||||
# Convert JSON schema to Drizzle
|
||||
relspec --input json --in-file schema.json --output drizzle --out-file db/schema.ts
|
||||
```
|
||||
|
||||
## Generated Code Example
|
||||
|
||||
```typescript
|
||||
import { pgTable, serial, varchar, text, timestamp, integer } from 'drizzle-orm/pg-core';
|
||||
import { relations } from 'drizzle-orm';
|
||||
|
||||
export const users = pgTable('users', {
|
||||
id: serial('id').primaryKey(),
|
||||
username: varchar('username', { length: 50 }).notNull().unique(),
|
||||
email: varchar('email', { length: 100 }).notNull(),
|
||||
bio: text('bio'),
|
||||
createdAt: timestamp('created_at').notNull().defaultNow(),
|
||||
});
|
||||
|
||||
export const posts = pgTable('posts', {
|
||||
id: serial('id').primaryKey(),
|
||||
userId: integer('user_id').notNull().references(() => users.id, { onDelete: 'cascade' }),
|
||||
title: varchar('title', { length: 200 }).notNull(),
|
||||
content: text('content'),
|
||||
});
|
||||
|
||||
export const usersRelations = relations(users, ({ many }) => ({
|
||||
posts: many(posts),
|
||||
}));
|
||||
|
||||
export const postsRelations = relations(posts, ({ one }) => ({
|
||||
user: one(users, {
|
||||
fields: [posts.userId],
|
||||
references: [users.id],
|
||||
}),
|
||||
}));
|
||||
```
|
||||
|
||||
## Supported Column Types
|
||||
|
||||
### PostgreSQL
|
||||
- `serial`, `bigserial` - Auto-increment integers
|
||||
- `integer`, `bigint`, `smallint` - Integer types
|
||||
- `varchar`, `text` - String types
|
||||
- `boolean` - Boolean
|
||||
- `timestamp`, `date`, `time` - Date/time types
|
||||
- `json`, `jsonb` - JSON types
|
||||
- `uuid` - UUID type
|
||||
|
||||
### MySQL
|
||||
- `int`, `bigint`, `smallint` - Integer types
|
||||
- `varchar`, `text` - String types
|
||||
- `boolean` - Boolean
|
||||
- `datetime`, `timestamp` - Date/time types
|
||||
- `json` - JSON type
|
||||
|
||||
## Notes
|
||||
|
||||
- Table names and column names are preserved as-is
|
||||
- Relationships are generated as separate relation definitions
|
||||
- Constraint actions (CASCADE, etc.) are included in references
|
||||
- Schema names other than 'public' are supported
|
||||
- Output is formatted TypeScript code
|
||||
Reference in New Issue
Block a user