package main import ( "fmt" "strconv" "github.com/mjensen/weimar/internal/config" "github.com/mjensen/weimar/internal/db" "github.com/mjensen/weimar/internal/storage" "github.com/spf13/cobra" ) var imageCmd = &cobra.Command{ Use: "image", Short: "Manage images", } var imageDeleteCmd = &cobra.Command{ Use: "delete ", Short: "Delete an image by ID", Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { id, err := strconv.ParseInt(args[0], 10, 64) if err != nil { return fmt.Errorf("invalid image ID: %w", err) } cfg := config.FromViper() database, err := db.Open(cfg.Database.Path) if err != nil { return fmt.Errorf("opening database: %w", err) } defer database.Close() img, err := database.GetImageByID(cmd.Context(), id) if err != nil { return fmt.Errorf("looking up image: %w", err) } st, err := storage.New(cfg.Storage.Path) if err != nil { return fmt.Errorf("opening storage: %w", err) } // Delete thumbnail first if it exists. if img.ThumbnailPath != nil { if err := st.Delete(*img.ThumbnailPath); err != nil { return fmt.Errorf("deleting thumbnail: %w", err) } } // Delete original file. if err := st.Delete(img.StoragePath); err != nil { return fmt.Errorf("deleting file: %w", err) } // Delete database record. if err := database.DeleteImage(cmd.Context(), id); err != nil { return fmt.Errorf("deleting image record: %w", err) } fmt.Fprintf(cmd.OutOrStdout(), "deleted image %d: %s\n", img.ID, img.Filename) return nil }, } func init() { rootCmd.AddCommand(imageCmd) imageCmd.AddCommand(imageDeleteCmd) }