diff options
author | Matthew Lemon <lemon@matthewlemon.com> | 2020-07-22 21:01:54 +0100 |
---|---|---|
committer | Matthew Lemon <lemon@matthewlemon.com> | 2020-07-22 21:01:54 +0100 |
commit | d7d4d0a0476f98d1b0b4c5c454b6d1048a82bdad (patch) | |
tree | 11aaba3bab132e3f7d13f73c61d8b14739794f50 /cmd/datamaps | |
parent | c3d4c6bb51a3d7b89e0fcbb69230db423577ae17 (diff) |
more major surgery
Diffstat (limited to 'cmd/datamaps')
-rw-r--r-- | cmd/datamaps/main.go | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/cmd/datamaps/main.go b/cmd/datamaps/main.go new file mode 100644 index 0000000..c2a1d71 --- /dev/null +++ b/cmd/datamaps/main.go @@ -0,0 +1,143 @@ +/* +datamaps-go is a simple tool to extract from and send data to spreadsheets. +*/ +package main + +import ( + "flag" + "fmt" + "log" + "net/http" + "os" + "path/filepath" + + "github.com/yulqen/datamaps-go/pkg/datamaps" +) + +const ( + config_dir_name = "datamaps-go" + db_name = "datamaps.db" +) + +func setUp() (string, error) { + dir, err := os.UserConfigDir() + if err != nil { + return "", err + } + // check if config folder exists + config_path := filepath.Join(dir, config_dir_name) + db_path := filepath.Join(config_path, db_name) + if _, err := os.Stat(config_path); os.IsNotExist(err) { + log.Println("Config directory does not exist.") + log.Printf("Creating config directory %s\n", config_path) + if err := os.Mkdir(filepath.Join(dir, "datamaps-go"), 0700); err != nil { + return "", err + } + } else { + log.Println("Config directory found.") + } + if _, err := os.Stat(db_path); os.IsNotExist(err) { + log.Println("Database does not exist.") + _, err = os.Create(db_path) + if err != nil { + return "", err + } + log.Printf("Creating database file at %s\n", db_path) + _, err := datamaps.SetupDB(db_path) + if err != nil { + return "", err + } + } else { + log.Println("Database file found.") + } + return dir, nil +} + +func main() { + // setup command + setupCmd := flag.NewFlagSet("setup", flag.ExitOnError) + setupCmd.Usage = func() { fmt.Println("No, you fucking idiot!") } + + // datamap command and its flags + datamapCmd := flag.NewFlagSet("datamap", flag.ExitOnError) + importFlg := datamapCmd.String("import", "/home/lemon/Documents/datamaps/input/datamap.csv", "Path to datamap") + nameFlg := datamapCmd.String("name", "Unnamed datamap", "The name you want to give to the imported datamap.") + overwriteFlg := datamapCmd.Bool("overwrite", false, "Start fresh with this datamap (erases existing datamap data).") + initialFlg := datamapCmd.Bool("initial", false, "This option must be used where no datamap table yet exists.") + + // server command and its flags + serverCmd := flag.NewFlagSet("server", flag.ExitOnError) + + if len(os.Args) < 2 { + fmt.Println("Expected 'datamap' or 'setup' subcommand") + os.Exit(1) + } + + opts := datamaps.Options{ + DBPath: "", + DMPath: *importFlg, + DMName: *nameFlg, + DMOverwrite: *overwriteFlg, + DMInitial: *initialFlg, + DMData: nil, + } + + switch os.Args[1] { + + case "server": + serverCmd.Parse(os.Args[2:]) + http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + if r.URL.Path != "/" { + http.NotFound(w, r) + return + } + fmt.Fprintf(w, "Welcome to datamaps!") + // or you could write it thus + // w.Write([]byte("Hello from Snippetbox")) + }) + log.Println("Starting server on :8080") + err := http.ListenAndServe(":8080", nil) + log.Fatal(err) + + case "datamap": + datamapCmd.Parse(os.Args[2:]) + fmt.Println("subcommand 'datamap'") + fmt.Println(" import:", *importFlg) + fmt.Println(" name:", *nameFlg) + fmt.Println(" overwrite:", *overwriteFlg) + fmt.Println(" initial:", *initialFlg) + + dir, err := os.UserConfigDir() + if err != nil { + os.Exit(1) + } + // check if config folder exists + config_path := filepath.Join(dir, config_dir_name) + if _, err := os.Stat(config_path); os.IsNotExist(err) { + fmt.Println("Config directory and database does not exist. Run datamaps setup to fix.") + os.Exit(1) + } + // Here we actually read the data from the file + data, err := datamaps.ReadDML(opts.ImportPath) + if err != nil { + log.Fatal(err) + } + opts.DMData = data + + opts.DBPath = filepath.Join(config_path, db_name) + err = datamaps.DatamapToDB(opts) + if err != nil { + log.Fatal(err) + } + case "setup": + setupCmd.Parse(os.Args[2:]) + _, err := setUp() + if err != nil { + log.Fatal(err) + } + + default: + fmt.Println("Do not recognised that command. Expected 'datamap' subcommand.") + os.Exit(1) + } +} |