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).