Files
sub-store/cmd/migrate.go
T

70 lines
1.4 KiB
Go

package cmd
import (
"fmt"
"os"
"github.com/spf13/cobra"
"github.com/peterqiu0516/sub-store/internal/config"
"github.com/peterqiu0516/sub-store/internal/database"
)
//go:generate echo "embed handled in migrate.go"
var migrateCmd = &cobra.Command{
Use: "migrate",
Short: "Run database migrations",
RunE: func(cmd *cobra.Command, args []string) error {
cfg, err := config.Load(configFile)
if err != nil {
return err
}
db, err := database.InitDB(cfg.Database.Path)
if err != nil {
return err
}
defer db.Close()
return database.RunMigrations(db)
},
}
var configFile string
func init() {
rootCmd.AddCommand(migrateCmd)
migrateCmd.Flags().StringVarP(&configFile, "config", "c", "", "config file path")
serveCmd.Flags().StringVarP(&configFile, "config", "c", "", "config file path")
rootCmd.AddCommand(serveCmd)
}
var serveCmd = &cobra.Command{
Use: "serve",
Short: "Start the Sub-Store HTTP server",
RunE: func(cmd *cobra.Command, args []string) error {
cfg, err := config.Load(configFile)
if err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
return RunServer(cfg)
},
}
func RunServer(cfg *config.Config) error {
db, err := database.InitDB(cfg.Database.Path)
if err != nil {
return err
}
defer db.Close()
if err := database.RunMigrations(db); err != nil {
return err
}
return startFiber(cfg, db)
}
// startFiber is implemented in server.go (same package).