Commands
$ hof help datamodel
Data models are values or objects used in many hof processes and modules.
The "datamodel" command helps you manage them and track their change history.
At their core, they represent the models that make up your application.
The intention is to define a data model for your entire application once,
then use this source of truth to generate code from database to server to client.
Hof's schema for datamodels is minimal and flexible, allowing you to define the
shape based on your application. You can have multiple datamodels as well.
You can also control and where and how history should be tracked. This history
is included during code generation so that database migrations and functions
for converting between versions can be created.
# Examples Datamodels
-- config.cue --
package datamodel
import (
"github.com/hofstadter-io/hof/schema/dm"
"github.com/hofstadter-io/hof/schema/dm/fields"
)
// Track an entire oject
Config: dm.Object & {
host: fields.String & { Default: "8080" }
database: {
host: fields.String
port: fields.String
dbconn: fields.String
}
}
-- database.cue --
package datamodel
import (
"github.com/hofstadter-io/hof/schema/dm/sql"
"github.com/hofstadter-io/hof/schema/dm/fields"
)
// Traditional database model which maps onto tables & columns
Datamodel: sql.Datamodel & {
// implied through definition, duplicated here for example clarity
$hof: metadata: {
id: "datamodel-abc123"
name: "MyDatamodel"
}
Models: {
User: {
Fields: {
ID: fields.UUID
CreatedAt: fields.Datetime
UpdatedAt: fields.Datetime
DeletedAt: fields.Datetime
email: fields.Email
username: fields.String
password: fields.Password
verified: fields.Bool
active: fields.Bool
persona: fields.Enum & {
Vals: ["guest", "user", "admin", "owner"]
Default: "user"
}
}
}
}
}
# Example Usage (dm is short for datamodel)
$ hof dm list (print known data models)
NAME TYPE VERSION STATUS ID
Config object - ok Config
MyDatamodel datamodel - ok datamodel-abc123
$ hof dm tree (print the structure of the datamodels)
$ hof dm diff (prints a tree based diff of the datamodel)
$ hof dm checkpoint -m "a message about this checkpoint"
$ hof dm log (prints the log of changes from latest to oldest)
You can also use the -d & -e flags to subselect datamodels and nested values
# Learn more:
- https://docs.hofstadter.io/getting-started/data-layer/
- https://docs.hofstadter.io/data-modeling/
Usage:
hof datamodel [command]
Aliases:
datamodel, dm
Available Commands:
checkpoint create a snapshot of the data model
diff show the current diff or between datamodel versions
list print available datamodels
log show the history for a datamodel
tree print datamodel structure as a tree
Flags:
-e, --expr stringArray CUE paths to select outputs, depending on the command
-h, --help help for datamodel
-M, --model stringArray specify one or more data models to operate on
Global Flags:
-E, --all-errors print all available errors
-i, --ignore-errors turn off output and assume defaults at prompts
-D, --include-data auto include all data files found with cue files
-V, --inject-env inject all ENV VARs as default tag vars
-I, --input stringArray extra data to unify into the root value
-p, --package string the Cue package context to use during execution
-l, --path stringArray CUE expression for single path component when placing data files
-q, --quiet turn off output and assume defaults at prompts
-d, --schema stringArray expression to select schema to apply to data files
--stats print generator statistics
-0, --stdin-empty A flag that ensure stdin is zero and does not block
-t, --tags stringArray @tags() to be injected into CUE code
-U, --user-files stringArray file globs to embed into the root value (<cue-path>=<file-glob>), use % as slash to trim before
-v, --verbosity int set the verbosity of output
--with-context add extra context for data files, usable in the -l/path flag
Use "hof datamodel [command] --help" for more information about a command.