Files
phylum/server/internal/command/command.go
2024-11-23 11:18:20 +05:30

75 lines
2.1 KiB
Go

package command
import (
"os"
"path"
"github.com/google/uuid"
"github.com/shroff/phylum/server/internal/command/fs"
"github.com/shroff/phylum/server/internal/command/publink"
"github.com/shroff/phylum/server/internal/command/schema"
"github.com/shroff/phylum/server/internal/command/serve"
storagecmd "github.com/shroff/phylum/server/internal/command/storage"
"github.com/shroff/phylum/server/internal/command/user"
"github.com/shroff/phylum/server/internal/core/db"
"github.com/shroff/phylum/server/internal/core/storage"
"github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)
func SetupCommand() {
viper.SetEnvPrefix("phylum")
var rootCmd = &cobra.Command{Use: path.Base(os.Args[0])}
flags := rootCmd.PersistentFlags()
flags.Bool("debug", false, "Debug mode")
viper.BindPFlag("debug", flags.Lookup("debug"))
flags.Bool("trace-sql", false, "Trace SQL Queries")
viper.BindPFlag("trace_sql", flags.Lookup("trace-sql"))
flags.StringP("working-dir", "W", "data", "Working Directory")
viper.BindPFlag("working_dir", flags.Lookup("working-dir"))
flags.String("database-url", "postgres://phylum:phylum@localhost:5432/phylum", "Database URL or DSN")
viper.BindPFlag("database_url", flags.Lookup("database-url"))
uuid.EnableRandPool()
rootCmd.PersistentPreRun = func(cmd *cobra.Command, args []string) {
if viper.GetBool("debug") {
logrus.SetLevel(logrus.TraceLevel)
logrus.Debug("Running in debug mode")
}
workDir := viper.GetString("working_dir")
if workDir != "." {
logrus.Debug("Setting working directory to " + workDir)
os.Mkdir(workDir, 0750)
os.Chdir(workDir)
}
db.DatabaseURL = viper.GetString("database_url")
db.TraceSQL = viper.GetBool("debug") && viper.GetBool("trace_sql")
db.AutoMigrate = viper.GetBool("auto_migrate")
storage.DefaultStorageDir = viper.GetString("default_storage_dir")
}
defer func() {
logrus.Debug("Shutting Down App")
db.Close()
}()
rootCmd.AddCommand([]*cobra.Command{
schema.SetupCommand(),
user.SetupCommand(),
storagecmd.SetupCommand(),
fs.SetupCommand(),
publink.SetupCommand(),
serve.SetupCommand(),
}...)
rootCmd.Execute()
}