package cmd import ( "kontor-api-gin/internal/api" "kontor-api-gin/internal/config" "log/slog" "reflect" "github.com/spf13/cobra" "github.com/spf13/viper" ) var syncCmd = &cobra.Command{ Use: "sync", Short: "Sync Kontor Database", Long: "Sync Kontor Database", // Args: cobra.ExactArgs(2), Run: func(cmd *cobra.Command, args []string) { slog.Info("sync kontor") apiVersion := viper.GetString("api") mainServer := config.Config.Server["main"] if config.Verbose > 2 { slog.Info("syncCmd#Run", "mainServer", mainServer) } localServer := config.Config.Server["local"] sourceData, _ := api.GetData(mainServer, apiVersion) targetData, _ := api.GetData(localServer, apiVersion) if config.Verbose > 2 { slog.Info("Size of targetData", "size", reflect.TypeOf(targetData).Size()) } slog.Info("iterate sourceData", "table", "Sport", "count", len(sourceData.Sport)) sourceData.Sport.CompareIds(&targetData.Sport) slog.Info("iterate sourceData", "table", "Player", "count", len(sourceData.Player)) sourceData.Player.CompareIds(&targetData.Player) slog.Info("iterate sourceData", "table", "MediaLofi", "count source", len(sourceData.MediaLoFi), "count target", len(targetData.MediaLoFi)) missing, obsolete, changed := sourceData.MediaLoFi.CompareIds(&targetData.MediaLoFi) for _, lofi_id := range missing { if !config.DryRun { slog.Info("add MediaLofi", "id", lofi_id) } } for _, lofi_id := range obsolete { if !config.DryRun { slog.Info("delete MediaLofi", "id", lofi_id) api.DeleteData(localServer, "media/lofis", lofi_id) } } for _, lofi_id := range changed { if !config.DryRun { slog.Info("update MediaLofi", "id", lofi_id) // api.UpdateData(localServer, "media/lofis", sourceData.MediaLoFi.GetMediaLofi(lofi_id)) } } }, } func init() { rootCmd.AddCommand(syncCmd) syncCmd.PersistentFlags().BoolVarP(&config.DryRun, "dry-run", "m", false, "do not execute data changes") }