70 lines
1.4 KiB
Go
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).
|