From 74c1a8a9e467eafccb963391e15c2f9f24db825d Mon Sep 17 00:00:00 2001 From: Jacob Brewer Date: Mon, 27 Jan 2025 11:56:37 +0000 Subject: [PATCH] feat(templates): adding a get all method that returns all records for that table (#67) * adding a get all method that returns all records for that table * using new methods --- pkg/migrations/status.go | 26 +++++++-------------- pkg/models/gen.go | 4 ++++ pkg/models/goschema_migration_history.xo.go | 19 +++++++++++++++ pkg/models/goschema_migration_version.xo.go | 19 +++++++++++++++ templates/model.tmpl | 19 +++++++++++++++ 5 files changed, 69 insertions(+), 18 deletions(-) create mode 100644 pkg/models/gen.go diff --git a/pkg/migrations/status.go b/pkg/migrations/status.go index cd87564..8f9edca 100644 --- a/pkg/migrations/status.go +++ b/pkg/migrations/status.go @@ -2,31 +2,21 @@ package migrations import ( "fmt" + "sort" "github.com/jacobbrewer1/goschema/pkg/models" ) func (v *versioning) GetStatus() ([]*models.GoschemaMigrationVersion, error) { - sqlStmt := ` - SELECT version - FROM goschema_migration_version - ORDER BY created_at DESC; - ` - - ids := make([]string, 0) - if err := v.db.Select(&ids, sqlStmt); err != nil { - return nil, fmt.Errorf("get status ids: %w", err) + versions, err := models.GetAllGoschemaMigrationVersion(v.db) + if err != nil { + return nil, fmt.Errorf("error getting goschema migration versions: %w", err) } - versions := make([]*models.GoschemaMigrationVersion, len(ids)) - for i, id := range ids { - ver, err := models.GoschemaMigrationVersionByVersion(v.db, id) - if err != nil { - return nil, fmt.Errorf("get status version by version: %w", err) - } - - versions[i] = ver - } + // Sort the versions by created_at. + sort.Slice(versions, func(i, j int) bool { + return versions[i].CreatedAt.Before(versions[j].CreatedAt) + }) return versions, nil } diff --git a/pkg/models/gen.go b/pkg/models/gen.go new file mode 100644 index 0000000..641386a --- /dev/null +++ b/pkg/models/gen.go @@ -0,0 +1,4 @@ +package models + +//go:generate rm -f ./*.xo.go +//go:generate goschema generate --out=./ --sql=./schemas/*.sql --extension=xo diff --git a/pkg/models/goschema_migration_history.xo.go b/pkg/models/goschema_migration_history.xo.go index 877684a..bd16e85 100644 --- a/pkg/models/goschema_migration_history.xo.go +++ b/pkg/models/goschema_migration_history.xo.go @@ -230,6 +230,25 @@ func GoschemaMigrationHistoryById(db DB, id int) (*GoschemaMigrationHistory, err return &m, nil } +// GetAllGoschemaMigrationHistory retrieves all rows from 'goschema_migration_history' as a slice of GoschemaMigrationHistory. +// +// Generated from table 'goschema_migration_history'. +func GetAllGoschemaMigrationHistory(db DB) ([]*GoschemaMigrationHistory, error) { + t := prometheus.NewTimer(DatabaseLatency.WithLabelValues("get_all_" + GoschemaMigrationHistoryTableName)) + defer t.ObserveDuration() + + const sqlstr = "SELECT `id`, `version`, `action`, `created_at` " + + "FROM goschema_migration_history" + + DBLog(sqlstr) + m := make([]*GoschemaMigrationHistory, 0) + if err := db.Select(&m, sqlstr); err != nil { + return nil, fmt.Errorf("failed to get all GoschemaMigrationHistory: %w", err) + } + + return m, nil +} + // Valid values for the 'Action' enum column var ( GoschemaMigrationHistoryActionMigratingUp = usql.NewEnum("migrating_up") diff --git a/pkg/models/goschema_migration_version.xo.go b/pkg/models/goschema_migration_version.xo.go index 14f6889..51b29d9 100644 --- a/pkg/models/goschema_migration_version.xo.go +++ b/pkg/models/goschema_migration_version.xo.go @@ -198,3 +198,22 @@ func GoschemaMigrationVersionByVersion(db DB, version string) (*GoschemaMigratio return &m, nil } + +// GetAllGoschemaMigrationVersion retrieves all rows from 'goschema_migration_version' as a slice of GoschemaMigrationVersion. +// +// Generated from table 'goschema_migration_version'. +func GetAllGoschemaMigrationVersion(db DB) ([]*GoschemaMigrationVersion, error) { + t := prometheus.NewTimer(DatabaseLatency.WithLabelValues("get_all_" + GoschemaMigrationVersionTableName)) + defer t.ObserveDuration() + + const sqlstr = "SELECT `version`, `is_current`, `created_at` " + + "FROM goschema_migration_version" + + DBLog(sqlstr) + m := make([]*GoschemaMigrationVersion, 0) + if err := db.Select(&m, sqlstr); err != nil { + return nil, fmt.Errorf("failed to get all GoschemaMigrationVersion: %w", err) + } + + return m, nil +} diff --git a/templates/model.tmpl b/templates/model.tmpl index 06ee7bb..d168676 100644 --- a/templates/model.tmpl +++ b/templates/model.tmpl @@ -162,6 +162,25 @@ func {{ $struct }}By{{ range $i, $col := $key.Columns }}{{ $col.Name | structify {{ end }} {{ end }} +// GetAll{{ $struct }} retrieves all rows from '{{ .Name }}' as a slice of {{ $struct }}. +// +// Generated from table '{{ .Name }}'. +func GetAll{{ $struct }}(db DB) ([]*{{ $struct }}, error) { + t := prometheus.NewTimer(DatabaseLatency.WithLabelValues("get_all_" + {{ $struct | structify }}TableName)) + defer t.ObserveDuration() + + const sqlstr = "SELECT {{ range $i, $column := $.Table.Columns }}{{ if $i }}, {{ end }}`{{ $column.Name }}`{{ end }} " + + "FROM {{ $.Table.Name }}" + + DBLog(sqlstr) + m := make([]*{{ $struct }}, 0) + if err := db.Select(&m, sqlstr); err != nil { + return nil, fmt.Errorf("failed to get all {{ $struct }}: %w", err) + } + + return m, nil +} + {{- range $enumcol := enum_columns . }} // Valid values for the '{{ $enumcol.Name | structify }}' enum column var (