strimertul/cli.database.go

96 lines
2.0 KiB
Go
Raw Normal View History

2022-11-16 11:23:54 +00:00
package main
import (
2024-03-15 22:48:34 +00:00
"encoding/json"
"log/slog"
2022-11-16 11:23:54 +00:00
"os"
"github.com/urfave/cli/v2"
2023-11-10 20:36:15 +00:00
"git.sr.ht/~ashkeel/strimertul/database"
"git.sr.ht/~ashkeel/strimertul/utils"
2022-11-16 11:23:54 +00:00
)
func cliImport(ctx *cli.Context) error {
inStream := os.Stdin
fileArg := ctx.String("file")
if fileArg != "" {
file, err := os.Open(fileArg)
if err != nil {
return fatalError(err, "could not open import file for reading")
2022-11-16 11:23:54 +00:00
}
defer utils.Close(file)
2022-11-16 11:23:54 +00:00
inStream = file
}
var entries map[string]string
err := json.NewDecoder(inStream).Decode(&entries)
2022-11-16 11:23:54 +00:00
if err != nil {
return fatalError(err, "could not decode import file")
2022-11-16 11:23:54 +00:00
}
2022-11-30 18:15:47 +00:00
driver, err := database.GetDatabaseDriver(ctx)
if err != nil {
return fatalError(err, "could not open database")
2022-11-16 11:23:54 +00:00
}
err = driver.Import(entries)
if err != nil {
return fatalError(err, "import failed")
}
slog.Info("Imported database from file")
2022-11-16 11:23:54 +00:00
return nil
}
func cliRestore(ctx *cli.Context) error {
inStream := os.Stdin
fileArg := ctx.String("file")
if fileArg != "" {
file, err := os.Open(fileArg)
if err != nil {
return fatalError(err, "could not open import file for reading")
2022-11-16 11:23:54 +00:00
}
defer utils.Close(file)
2022-11-16 11:23:54 +00:00
inStream = file
}
2022-11-30 18:15:47 +00:00
driver, err := database.GetDatabaseDriver(ctx)
if err != nil {
return fatalError(err, "could not open database")
2022-11-16 11:23:54 +00:00
}
err = driver.Restore(inStream)
if err != nil {
return fatalError(err, "restore failed")
}
slog.Info("Restored database from backup")
2022-11-16 11:23:54 +00:00
return nil
}
func cliExport(ctx *cli.Context) error {
outStream := os.Stdout
fileArg := ctx.String("file")
if fileArg != "" {
file, err := os.Create(fileArg)
if err != nil {
return fatalError(err, "could not open output file for writing")
2022-11-16 11:23:54 +00:00
}
defer utils.Close(file)
2022-11-16 11:23:54 +00:00
outStream = file
}
2022-11-30 18:15:47 +00:00
driver, err := database.GetDatabaseDriver(ctx)
if err != nil {
return fatalError(err, "could not open database")
}
err = driver.Export(outStream)
if err != nil {
return fatalError(err, "export failed")
2022-11-16 11:23:54 +00:00
}
slog.Info("Exported database")
2022-11-16 11:23:54 +00:00
return nil
}