migrate

package
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 27, 2026 License: MIT Imports: 6 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// WithGlobalUniqueID sets the universal ids options to the migration.
	// If this option is enabled, ent migration will allocate a 1<<32 range
	// for the ids of each entity (table).
	// Note that this option cannot be applied on tables that already exist.
	WithGlobalUniqueID = schema.WithGlobalUniqueID
	// WithDropColumn sets the drop column option to the migration.
	// If this option is enabled, ent migration will drop old columns
	// that were used for both fields and edges. This defaults to false.
	WithDropColumn = schema.WithDropColumn
	// WithDropIndex sets the drop index option to the migration.
	// If this option is enabled, ent migration will drop old indexes
	// that were defined in the schema. This defaults to false.
	// Note that unique constraints are defined using `UNIQUE INDEX`,
	// and therefore, it's recommended to enable this option to get more
	// flexibility in the schema changes.
	WithDropIndex = schema.WithDropIndex
	// WithForeignKeys enables creating foreign-key in schema DDL. This defaults to true.
	WithForeignKeys = schema.WithForeignKeys
)
View Source
var (
	// EventsColumns holds the columns for the "events" table.
	EventsColumns = []*schema.Column{
		{Name: "id", Type: field.TypeUUID},
		{Name: "org_id", Type: field.TypeUUID},
		{Name: "event_id", Type: field.TypeString, Size: 255},
		{Name: "session_id", Type: field.TypeString, Size: 255},
		{Name: "user_id", Type: field.TypeString, Nullable: true, Size: 255},
		{Name: "event_type", Type: field.TypeEnum, Enums: []string{"page_view", "page_leave", "ui_click", "ui_input", "ui_scroll", "ui_focus", "ui_blur", "ui_submit", "state_change", "api_request", "api_response", "journey_step", "error", "performance", "custom"}},
		{Name: "event_name", Type: field.TypeString, Nullable: true, Size: 255},
		{Name: "timestamp", Type: field.TypeTime},
		{Name: "sequence", Type: field.TypeInt64, Default: 0},
		{Name: "page_path", Type: field.TypeString, Nullable: true, Size: 1024},
		{Name: "page_title", Type: field.TypeString, Nullable: true, Size: 255},
		{Name: "page_url", Type: field.TypeString, Nullable: true, Size: 2048},
		{Name: "page_referrer", Type: field.TypeString, Nullable: true, Size: 2048},
		{Name: "ui_component_name", Type: field.TypeString, Nullable: true, Size: 255},
		{Name: "ui_component_path", Type: field.TypeString, Nullable: true, Size: 1024},
		{Name: "ui_component_type", Type: field.TypeString, Nullable: true, Size: 100},
		{Name: "ui_action", Type: field.TypeString, Nullable: true, Size: 100},
		{Name: "ui_element", Type: field.TypeString, Nullable: true, Size: 255},
		{Name: "ui_element_text", Type: field.TypeString, Nullable: true, Size: 500},
		{Name: "ui_viewport", Type: field.TypeString, Nullable: true, Size: 50},
		{Name: "ui_scroll_position", Type: field.TypeFloat64, Nullable: true},
		{Name: "ui_state_key", Type: field.TypeString, Nullable: true, Size: 255},
		{Name: "ui_state_before", Type: field.TypeString, Nullable: true, Size: 2147483647},
		{Name: "ui_state_after", Type: field.TypeString, Nullable: true, Size: 2147483647},
		{Name: "ui_state_change_type", Type: field.TypeString, Nullable: true, Size: 50},
		{Name: "journey_step_id", Type: field.TypeString, Nullable: true, Size: 255},
		{Name: "journey_step_name", Type: field.TypeString, Nullable: true, Size: 255},
		{Name: "conversion_status", Type: field.TypeString, Nullable: true, Size: 50},
		{Name: "api_method", Type: field.TypeString, Nullable: true, Size: 10},
		{Name: "api_path", Type: field.TypeString, Nullable: true, Size: 1024},
		{Name: "api_status_code", Type: field.TypeInt, Nullable: true},
		{Name: "api_duration_ms", Type: field.TypeInt64, Nullable: true},
		{Name: "error_type", Type: field.TypeString, Nullable: true, Size: 255},
		{Name: "error_message", Type: field.TypeString, Nullable: true, Size: 2147483647},
		{Name: "error_stack", Type: field.TypeString, Nullable: true, Size: 2147483647},
		{Name: "error_component", Type: field.TypeString, Nullable: true, Size: 255},
		{Name: "performance_lcp_ms", Type: field.TypeFloat64, Nullable: true},
		{Name: "performance_fid_ms", Type: field.TypeFloat64, Nullable: true},
		{Name: "performance_cls", Type: field.TypeFloat64, Nullable: true},
		{Name: "performance_ttfb_ms", Type: field.TypeFloat64, Nullable: true},
		{Name: "snapshot_url", Type: field.TypeString, Nullable: true, Size: 1024},
		{Name: "snapshot_viewport", Type: field.TypeString, Nullable: true, Size: 50},
		{Name: "duration_ms", Type: field.TypeInt64, Nullable: true},
		{Name: "metadata", Type: field.TypeJSON, Nullable: true},
		{Name: "created_at", Type: field.TypeTime},
		{Name: "journey_id", Type: field.TypeUUID, Nullable: true},
		{Name: "project_id", Type: field.TypeUUID},
	}
	// EventsTable holds the schema information for the "events" table.
	EventsTable = &schema.Table{
		Name:       "events",
		Columns:    EventsColumns,
		PrimaryKey: []*schema.Column{EventsColumns[0]},
		ForeignKeys: []*schema.ForeignKey{
			{
				Symbol:     "events_journeys_events",
				Columns:    []*schema.Column{EventsColumns[45]},
				RefColumns: []*schema.Column{JourneysColumns[0]},
				OnDelete:   schema.SetNull,
			},
			{
				Symbol:     "events_projects_events",
				Columns:    []*schema.Column{EventsColumns[46]},
				RefColumns: []*schema.Column{ProjectsColumns[0]},
				OnDelete:   schema.NoAction,
			},
		},
		Indexes: []*schema.Index{
			{
				Name:    "event_org_id_project_id_timestamp",
				Unique:  false,
				Columns: []*schema.Column{EventsColumns[1], EventsColumns[46], EventsColumns[7]},
			},
			{
				Name:    "event_org_id_session_id",
				Unique:  false,
				Columns: []*schema.Column{EventsColumns[1], EventsColumns[3]},
			},
			{
				Name:    "event_org_id_user_id",
				Unique:  false,
				Columns: []*schema.Column{EventsColumns[1], EventsColumns[4]},
			},
			{
				Name:    "event_org_id_journey_id",
				Unique:  false,
				Columns: []*schema.Column{EventsColumns[1], EventsColumns[45]},
			},
			{
				Name:    "event_org_id_event_type_timestamp",
				Unique:  false,
				Columns: []*schema.Column{EventsColumns[1], EventsColumns[5], EventsColumns[7]},
			},
			{
				Name:    "event_project_id_event_id",
				Unique:  true,
				Columns: []*schema.Column{EventsColumns[46], EventsColumns[2]},
			},
		},
	}
	// JourneysColumns holds the columns for the "journeys" table.
	JourneysColumns = []*schema.Column{
		{Name: "id", Type: field.TypeUUID},
		{Name: "org_id", Type: field.TypeUUID},
		{Name: "name", Type: field.TypeString, Size: 255},
		{Name: "description", Type: field.TypeString, Nullable: true, Size: 2147483647},
		{Name: "entry_conditions", Type: field.TypeJSON, Nullable: true},
		{Name: "exit_conditions", Type: field.TypeJSON, Nullable: true},
		{Name: "steps", Type: field.TypeJSON, Nullable: true},
		{Name: "timeout_minutes", Type: field.TypeInt, Default: 30},
		{Name: "total_sessions", Type: field.TypeInt64, Default: 0},
		{Name: "converted_sessions", Type: field.TypeInt64, Default: 0},
		{Name: "conversion_rate", Type: field.TypeFloat64, Default: 0},
		{Name: "avg_duration_ms", Type: field.TypeInt64, Default: 0},
		{Name: "is_active", Type: field.TypeBool, Default: true},
		{Name: "created_at", Type: field.TypeTime},
		{Name: "updated_at", Type: field.TypeTime},
		{Name: "project_id", Type: field.TypeUUID},
	}
	// JourneysTable holds the schema information for the "journeys" table.
	JourneysTable = &schema.Table{
		Name:       "journeys",
		Columns:    JourneysColumns,
		PrimaryKey: []*schema.Column{JourneysColumns[0]},
		ForeignKeys: []*schema.ForeignKey{
			{
				Symbol:     "journeys_projects_journeys",
				Columns:    []*schema.Column{JourneysColumns[15]},
				RefColumns: []*schema.Column{ProjectsColumns[0]},
				OnDelete:   schema.NoAction,
			},
		},
		Indexes: []*schema.Index{
			{
				Name:    "journey_org_id_project_id",
				Unique:  false,
				Columns: []*schema.Column{JourneysColumns[1], JourneysColumns[15]},
			},
			{
				Name:    "journey_org_id_is_active",
				Unique:  false,
				Columns: []*schema.Column{JourneysColumns[1], JourneysColumns[12]},
			},
			{
				Name:    "journey_project_id_name",
				Unique:  true,
				Columns: []*schema.Column{JourneysColumns[15], JourneysColumns[2]},
			},
		},
	}
	// OrganizationsColumns holds the columns for the "organizations" table.
	OrganizationsColumns = []*schema.Column{
		{Name: "id", Type: field.TypeUUID},
		{Name: "name", Type: field.TypeString, Size: 255},
		{Name: "slug", Type: field.TypeString, Unique: true, Size: 100},
		{Name: "created_at", Type: field.TypeTime},
		{Name: "updated_at", Type: field.TypeTime},
	}
	// OrganizationsTable holds the schema information for the "organizations" table.
	OrganizationsTable = &schema.Table{
		Name:       "organizations",
		Columns:    OrganizationsColumns,
		PrimaryKey: []*schema.Column{OrganizationsColumns[0]},
	}
	// ProjectsColumns holds the columns for the "projects" table.
	ProjectsColumns = []*schema.Column{
		{Name: "id", Type: field.TypeUUID},
		{Name: "name", Type: field.TypeString, Size: 255},
		{Name: "slug", Type: field.TypeString, Size: 100},
		{Name: "api_key", Type: field.TypeString, Unique: true, Size: 64},
		{Name: "settings", Type: field.TypeJSON, Nullable: true},
		{Name: "created_at", Type: field.TypeTime},
		{Name: "updated_at", Type: field.TypeTime},
		{Name: "org_id", Type: field.TypeUUID},
	}
	// ProjectsTable holds the schema information for the "projects" table.
	ProjectsTable = &schema.Table{
		Name:       "projects",
		Columns:    ProjectsColumns,
		PrimaryKey: []*schema.Column{ProjectsColumns[0]},
		ForeignKeys: []*schema.ForeignKey{
			{
				Symbol:     "projects_organizations_projects",
				Columns:    []*schema.Column{ProjectsColumns[7]},
				RefColumns: []*schema.Column{OrganizationsColumns[0]},
				OnDelete:   schema.NoAction,
			},
		},
		Indexes: []*schema.Index{
			{
				Name:    "project_org_id_slug",
				Unique:  true,
				Columns: []*schema.Column{ProjectsColumns[7], ProjectsColumns[2]},
			},
			{
				Name:    "project_api_key",
				Unique:  false,
				Columns: []*schema.Column{ProjectsColumns[3]},
			},
		},
	}
	// SessionsColumns holds the columns for the "sessions" table.
	SessionsColumns = []*schema.Column{
		{Name: "id", Type: field.TypeUUID},
		{Name: "org_id", Type: field.TypeUUID},
		{Name: "session_id", Type: field.TypeString, Size: 255},
		{Name: "user_id", Type: field.TypeString, Nullable: true, Size: 255},
		{Name: "started_at", Type: field.TypeTime},
		{Name: "ended_at", Type: field.TypeTime, Nullable: true},
		{Name: "duration_ms", Type: field.TypeInt64, Default: 0},
		{Name: "entry_page", Type: field.TypeString, Nullable: true, Size: 1024},
		{Name: "exit_page", Type: field.TypeString, Nullable: true, Size: 1024},
		{Name: "page_count", Type: field.TypeInt, Default: 0},
		{Name: "event_count", Type: field.TypeInt, Default: 0},
		{Name: "last_journey_step_id", Type: field.TypeString, Nullable: true, Size: 255},
		{Name: "conversion_status", Type: field.TypeString, Nullable: true, Size: 50},
		{Name: "user_agent", Type: field.TypeString, Nullable: true, Size: 1024},
		{Name: "device_type", Type: field.TypeString, Nullable: true, Size: 50},
		{Name: "browser", Type: field.TypeString, Nullable: true, Size: 100},
		{Name: "os", Type: field.TypeString, Nullable: true, Size: 100},
		{Name: "country", Type: field.TypeString, Nullable: true, Size: 2},
		{Name: "region", Type: field.TypeString, Nullable: true, Size: 100},
		{Name: "city", Type: field.TypeString, Nullable: true, Size: 100},
		{Name: "created_at", Type: field.TypeTime},
		{Name: "updated_at", Type: field.TypeTime},
		{Name: "journey_id", Type: field.TypeUUID, Nullable: true},
		{Name: "project_id", Type: field.TypeUUID},
	}
	// SessionsTable holds the schema information for the "sessions" table.
	SessionsTable = &schema.Table{
		Name:       "sessions",
		Columns:    SessionsColumns,
		PrimaryKey: []*schema.Column{SessionsColumns[0]},
		ForeignKeys: []*schema.ForeignKey{
			{
				Symbol:     "sessions_journeys_sessions",
				Columns:    []*schema.Column{SessionsColumns[22]},
				RefColumns: []*schema.Column{JourneysColumns[0]},
				OnDelete:   schema.SetNull,
			},
			{
				Symbol:     "sessions_projects_sessions",
				Columns:    []*schema.Column{SessionsColumns[23]},
				RefColumns: []*schema.Column{ProjectsColumns[0]},
				OnDelete:   schema.NoAction,
			},
		},
		Indexes: []*schema.Index{
			{
				Name:    "session_org_id_project_id_started_at",
				Unique:  false,
				Columns: []*schema.Column{SessionsColumns[1], SessionsColumns[23], SessionsColumns[4]},
			},
			{
				Name:    "session_org_id_session_id",
				Unique:  false,
				Columns: []*schema.Column{SessionsColumns[1], SessionsColumns[2]},
			},
			{
				Name:    "session_org_id_user_id",
				Unique:  false,
				Columns: []*schema.Column{SessionsColumns[1], SessionsColumns[3]},
			},
			{
				Name:    "session_org_id_journey_id",
				Unique:  false,
				Columns: []*schema.Column{SessionsColumns[1], SessionsColumns[22]},
			},
			{
				Name:    "session_org_id_conversion_status",
				Unique:  false,
				Columns: []*schema.Column{SessionsColumns[1], SessionsColumns[12]},
			},
			{
				Name:    "session_project_id_session_id",
				Unique:  true,
				Columns: []*schema.Column{SessionsColumns[23], SessionsColumns[2]},
			},
		},
	}
	// Tables holds all the tables in the schema.
	Tables = []*schema.Table{
		EventsTable,
		JourneysTable,
		OrganizationsTable,
		ProjectsTable,
		SessionsTable,
	}
)

Functions

func Create

func Create(ctx context.Context, s *Schema, tables []*schema.Table, opts ...schema.MigrateOption) error

Create creates all table resources using the given schema driver.

Types

type Schema

type Schema struct {
	// contains filtered or unexported fields
}

Schema is the API for creating, migrating and dropping a schema.

func NewSchema

func NewSchema(drv dialect.Driver) *Schema

NewSchema creates a new schema client.

func (*Schema) Create

func (s *Schema) Create(ctx context.Context, opts ...schema.MigrateOption) error

Create creates all schema resources.

func (*Schema) WriteTo

func (s *Schema) WriteTo(ctx context.Context, w io.Writer, opts ...schema.MigrateOption) error

WriteTo writes the schema changes to w instead of running them against the database.

if err := client.Schema.WriteTo(context.Background(), os.Stdout); err != nil {
	log.Fatal(err)
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL