Files
relspecgo/pkg/readers/bun
warkanum 96281c9f03
Release / test (push) Failing after 2m20s
Release / release (push) Skipped
Release / pkg-aur (push) Skipped
Release / pkg-deb (push) Skipped
Release / pkg-rpm (push) Skipped
chore(ci): add govulncheck, staticcheck, go vet, gofumpt gates
* Add lint/format checks to the Gitea release workflow and Makefile
  (targets: vet, fmt, fmt-check, staticcheck, govulncheck, check)
* Switch .golangci.json formatter from gofmt to gofumpt (extra.group-params)
* Bump golang.org/x/text 0.37.0 -> 0.39.0 for GO-2026-5970; re-vendor
* Fix staticcheck S1011 in pkg/diff; drop unused pgsql writer helpers
* Fix gocritic unnamedResult (pkg/diff) and rangeValCopy (pkg/pgsql)
* Apply gofumpt + goimports formatting across the tree
2026-09-03 21:17:03 +02:00
..
2025-12-28 10:34:20 +02:00

Bun Reader

Reads Go source files containing Bun model definitions and extracts database schema information.

Overview

The Bun Reader parses Go source code files that define Bun models (structs with bun struct tags) and converts them into RelSpec's internal database model representation.

Features

  • Parses Bun struct tags to extract column definitions
  • Extracts table names from bun:"table:tablename" tags
  • Identifies primary keys, foreign keys, and indexes
  • Supports relationship detection
  • Handles both single files and directories

Usage

Basic Example

package main

import (
    "fmt"
    "git.warky.dev/wdevs/relspecgo/pkg/readers"
    "git.warky.dev/wdevs/relspecgo/pkg/readers/bun"
)

func main() {
    options := &readers.ReaderOptions{
        FilePath: "/path/to/models.go",
    }

    reader := bun.NewReader(options)
    db, err := reader.ReadDatabase()
    if err != nil {
        panic(err)
    }

    fmt.Printf("Found %d schemas\n", len(db.Schemas))
}

CLI Example

# Read Bun models and convert to JSON
relspec --input bun --in-file models/ --output json --out-file schema.json

# Convert Bun models to GORM
relspec --input bun --in-file models.go --output gorm --out-file gorm_models.go

Supported Bun Tags

The reader recognizes the following Bun struct tags:

  • table - Table name
  • column - Column name
  • type - SQL data type
  • pk - Primary key
  • notnull - NOT NULL constraint
  • autoincrement - Auto-increment column
  • default - Default value
  • unique - Unique constraint
  • rel - Relationship definition

Example Bun Model

package models

import (
    "time"
    "github.com/uptrace/bun"
)

type User struct {
    bun.BaseModel `bun:"table:users,alias:u"`

    ID        int64     `bun:"id,pk,autoincrement"`
    Username  string    `bun:"username,notnull,unique"`
    Email     string    `bun:"email,notnull"`
    CreatedAt time.Time `bun:"created_at,notnull,default:now()"`

    Posts []*Post `bun:"rel:has-many,join:id=user_id"`
}

type Post struct {
    bun.BaseModel `bun:"table:posts,alias:p"`

    ID      int64  `bun:"id,pk"`
    UserID  int64  `bun:"user_id,notnull"`
    Title   string `bun:"title,notnull"`
    Content string `bun:"content"`

    User *User `bun:"rel:belongs-to,join:user_id=id"`
}

Notes

  • Test files (ending in _test.go) are automatically excluded
  • The bun.BaseModel embedded struct is automatically recognized
  • Schema defaults to public if not specified