From dfaf21b234a8ff6db170805a45f539a5c2bae134 Mon Sep 17 00:00:00 2001 From: Philipp Wolfer Date: Sun, 12 Nov 2023 00:54:51 +0100 Subject: [PATCH] Implemented beam loves command --- cmd/common.go | 38 +++++++++++++++++++++++++++++ cmd/listens.go | 12 +-------- cmd/loves.go | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 105 insertions(+), 11 deletions(-) create mode 100644 cmd/common.go create mode 100644 cmd/loves.go diff --git a/cmd/common.go b/cmd/common.go new file mode 100644 index 0000000..79242be --- /dev/null +++ b/cmd/common.go @@ -0,0 +1,38 @@ +/* +Copyright © 2023 Philipp Wolfer + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ +package cmd + +import ( + "fmt" + + "github.com/spf13/cobra" + "github.com/spf13/viper" +) + +func getConfigFromFlag(cmd *cobra.Command, flagName string) (string, *viper.Viper) { + configName := cmd.Flag(flagName).Value.String() + config := viper.Sub(configName) + if config == nil { + cobra.CheckErr(fmt.Sprintf("Invalid source configuration \"%s\"", configName)) + } + return configName, config +} diff --git a/cmd/listens.go b/cmd/listens.go index dd89fb4..36de419 100644 --- a/cmd/listens.go +++ b/cmd/listens.go @@ -26,7 +26,6 @@ import ( "time" "github.com/spf13/cobra" - "github.com/spf13/viper" "go.uploadedlobster.com/scotty/backends" ) @@ -38,7 +37,7 @@ var listensCmd = &cobra.Command{ Run: func(cmd *cobra.Command, args []string) { sourceName, sourceConfig := getConfigFromFlag(cmd, "from") targetName, targetConfig := getConfigFromFlag(cmd, "to") - fmt.Printf("Transfering listens from %s to %s...\n", sourceName, targetName) + fmt.Printf("Transferring listens from %s to %s...\n", sourceName, targetName) exportBackend, err := backends.ResolveBackend[backends.ListenExport](sourceConfig) cobra.CheckErr(err) importBackend, err := backends.ResolveBackend[backends.ListenImport](targetConfig) @@ -52,15 +51,6 @@ var listensCmd = &cobra.Command{ }, } -func getConfigFromFlag(cmd *cobra.Command, flagName string) (string, *viper.Viper) { - configName := cmd.Flag(flagName).Value.String() - config := viper.Sub(configName) - if config == nil { - cobra.CheckErr(fmt.Sprintf("Invalid source configuration \"%s\"", configName)) - } - return configName, config -} - func init() { beamCmd.AddCommand(listensCmd) // Here you will define your flags and configuration settings. diff --git a/cmd/loves.go b/cmd/loves.go new file mode 100644 index 0000000..a023496 --- /dev/null +++ b/cmd/loves.go @@ -0,0 +1,66 @@ +/* +Copyright © 2023 Philipp Wolfer + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ +package cmd + +import ( + "fmt" + "time" + + "github.com/spf13/cobra" + "go.uploadedlobster.com/scotty/backends" +) + +// lovesCmd represents the loves command +var lovesCmd = &cobra.Command{ + Use: "loves", + Short: "Transfer loves between two backends", + Long: `Transfers loves between two configured backends.`, + Run: func(cmd *cobra.Command, args []string) { + sourceName, sourceConfig := getConfigFromFlag(cmd, "from") + targetName, targetConfig := getConfigFromFlag(cmd, "to") + fmt.Printf("Transferring loves from %s to %s...\n", sourceName, targetName) + exportBackend, err := backends.ResolveBackend[backends.LovesExport](sourceConfig) + cobra.CheckErr(err) + importBackend, err := backends.ResolveBackend[backends.LovesImport](targetConfig) + cobra.CheckErr(err) + timestamp := time.Unix(0, 0) + loves, err := exportBackend.ExportLoves(timestamp) + cobra.CheckErr(err) + result, err := importBackend.ImportLoves(loves, timestamp) + cobra.CheckErr(err) + fmt.Printf("Imported %v loves (last timestamp %v)\n", result.Count, result.LastTimestamp) + }, +} + +func init() { + beamCmd.AddCommand(lovesCmd) + + // Here you will define your flags and configuration settings. + + // Cobra supports Persistent Flags which will work for this command + // and all subcommands, e.g.: + // lovesCmd.PersistentFlags().String("foo", "", "A help for foo") + + // Cobra supports local flags which will only run when this command + // is called directly, e.g.: + // lovesCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") +}