feat(db): prepare migrations and core CRD

This commit is contained in:
Peter 2024-12-13 09:09:14 +01:00
parent 734e1b22f9
commit 12090c913a
Signed by: prskr
GPG key ID: F56BED6903BC5E37
105 changed files with 5910 additions and 54 deletions
assets/migrations

View file

@ -0,0 +1,62 @@
package migrations
import (
"embed"
"io/fs"
"iter"
"path"
"slices"
"strings"
)
//go:embed */*.sql
var migrationsFS embed.FS
type Script struct {
FileName string
Content string
}
func InitScripts() iter.Seq2[Script, error] {
return readScripts(path.Join(".", "init-scripts"))
}
func MigrationScripts() iter.Seq2[Script, error] {
return readScripts(path.Join(".", "migrations"))
}
func readScripts(dir string) iter.Seq2[Script, error] {
return iter.Seq2[Script, error](func(yield func(Script, error) bool) {
files, err := migrationsFS.ReadDir(dir)
if err != nil {
yield(Script{}, err)
return
}
slices.SortFunc(files, func(a, b fs.DirEntry) int {
return strings.Compare(a.Name(), b.Name())
})
for _, file := range files {
if file.IsDir() {
continue
}
content, err := migrationsFS.ReadFile(path.Join(dir, file.Name()))
if err != nil {
if !yield(Script{}, err) {
return
}
}
s := Script{
FileName: file.Name(),
Content: string(content),
}
if !yield(s, nil) {
return
}
}
})
}