Files
Hein 5d3c86119e
Some checks failed
CI / Test (1.24) (push) Successful in -27m28s
CI / Test (1.25) (push) Successful in -27m30s
CI / Build (push) Failing after -28m36s
Integration Tests / Integration Tests (push) Failing after -28m8s
CI / Lint (push) Successful in -27m54s
feat(domains): add domain support for DrawDB integration
- Introduce Domain and DomainTable models for logical grouping of tables.
- Implement export and import functionality for domains in DrawDB format.
- Update template execution modes to include domain processing.
- Enhance documentation for domain features and usage.
2026-01-04 15:49:47 +02:00
..
2025-12-28 10:34:20 +02:00
2025-12-16 18:10:40 +02:00
2025-12-17 22:52:24 +02:00

DrawDB Writer

Generates DrawDB-compatible JSON files from database schema information.

Overview

The DrawDB Writer converts RelSpec's internal database model representation into JSON format compatible with DrawDB, a free online database design tool.

Features

  • Generates DrawDB JSON format
  • Creates table and field definitions
  • Defines relationships
  • Includes visual layout information
  • Preserves constraints and indexes

Usage

Basic Example

package main

import (
    "git.warky.dev/wdevs/relspecgo/pkg/models"
    "git.warky.dev/wdevs/relspecgo/pkg/writers"
    "git.warky.dev/wdevs/relspecgo/pkg/writers/drawdb"
)

func main() {
    options := &writers.WriterOptions{
        OutputPath: "diagram.json",
    }

    writer := drawdb.NewWriter(options)
    err := writer.WriteDatabase(db)
    if err != nil {
        panic(err)
    }
}

CLI Examples

# Generate DrawDB diagram from PostgreSQL database
relspec --input pgsql \
  --conn "postgres://localhost/mydb" \
  --output drawdb \
  --out-file diagram.json

# Convert GORM models to DrawDB for visualization
relspec --input gorm --in-file models.go --output drawdb --out-file design.json

# Convert JSON schema to DrawDB
relspec --input json --in-file schema.json --output drawdb --out-file diagram.json

Generated JSON Example

{
  "version": "1.0",
  "database": "PostgreSQL",
  "tables": [
    {
      "id": "1",
      "name": "users",
      "x": 100,
      "y": 100,
      "fields": [
        {
          "id": "1",
          "name": "id",
          "type": "BIGINT",
          "primary": true,
          "autoIncrement": true,
          "notNull": true
        },
        {
          "id": "2",
          "name": "username",
          "type": "VARCHAR",
          "size": 50,
          "notNull": true,
          "unique": true
        },
        {
          "id": "3",
          "name": "email",
          "type": "VARCHAR",
          "size": 100,
          "notNull": true
        }
      ],
      "indexes": [
        {
          "name": "idx_users_email",
          "fields": ["email"]
        }
      ]
    },
    {
      "id": "2",
      "name": "posts",
      "x": 400,
      "y": 100,
      "fields": [
        {
          "id": "1",
          "name": "id",
          "type": "BIGINT",
          "primary": true
        },
        {
          "id": "2",
          "name": "user_id",
          "type": "BIGINT",
          "notNull": true
        },
        {
          "id": "3",
          "name": "title",
          "type": "VARCHAR",
          "size": 200,
          "notNull": true
        }
      ]
    }
  ],
  "relationships": [
    {
      "id": "1",
      "source": "2",
      "target": "1",
      "sourceField": "user_id",
      "targetField": "id",
      "type": "many-to-one",
      "onDelete": "CASCADE"
    }
  ]
}

DrawDB Features

Table Properties

  • id - Unique table identifier
  • name - Table name
  • x, y - Position in diagram
  • fields - Array of field definitions
  • indexes - Array of index definitions

Field Properties

  • id - Unique field identifier
  • name - Field name
  • type - Data type (BIGINT, VARCHAR, etc.)
  • size - Length for string types
  • primary - Primary key flag
  • notNull - NOT NULL constraint
  • unique - Unique constraint
  • autoIncrement - Auto-increment flag
  • default - Default value

Relationship Properties

  • id - Unique relationship identifier
  • source - Source table ID
  • target - Target table ID
  • sourceField - Foreign key field
  • targetField - Referenced field
  • type - Relationship type (one-to-one, one-to-many, many-to-one)
  • onDelete - Delete action
  • onUpdate - Update action

Notes

  • DrawDB is available at drawdb.vercel.app
  • Generated files can be imported for visual editing
  • Visual positions (x, y) are auto-generated
  • Ideal for creating ERD diagrams
  • Supports modern database features
  • Free and open-source tool