From 6af9377cf51111e4b14394f496d9dbdaa6199104 Mon Sep 17 00:00:00 2001 From: Matt Low Date: Mon, 13 Nov 2023 06:56:05 +0000 Subject: [PATCH] Implement `lmcli rm` --- pkg/cli/cmd.go | 35 +++++++++++++++++++++++++++++++++++ pkg/cli/store.go | 5 +++++ 2 files changed, 40 insertions(+) diff --git a/pkg/cli/cmd.go b/pkg/cli/cmd.go index 7be5e4b..0339a52 100644 --- a/pkg/cli/cmd.go +++ b/pkg/cli/cmd.go @@ -122,6 +122,40 @@ var lsCmd = &cobra.Command{ }, } +var rmCmd = &cobra.Command{ + Use: "rm [conversation]", + Short: "Remove a conversation", + Long: `Removes a conversation by its short name.`, + Args: func(cmd *cobra.Command, args []string) error { + argCount := 1 + if err := cobra.MinimumNArgs(argCount)(cmd, args); err != nil { + return err + } + return nil + }, + Run: func(cmd *cobra.Command, args []string) { + shortName := args[0] + conversation, err := store.ConversationByShortName(shortName) + if err != nil { + Fatal("Cloud not search for conversation: %v\n", err) + } + if conversation.ID == 0 || err != nil { + Fatal("Conversation not found with short name: %s\n", shortName) + } + err = store.DeleteConversation(conversation) + if err != nil { + Fatal("Could not delete conversation: %v\n", err) + } + }, + ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { + compMode := cobra.ShellCompDirectiveNoFileComp + if len(args) != 0 { + return nil, compMode + } + return store.ConversationShortNameCompletions(toComplete), compMode + }, +} + var viewCmd = &cobra.Command{ Use: "view [conversation]", Short: "View messages in a conversation", @@ -289,6 +323,7 @@ func NewRootCmd() *cobra.Command { lsCmd, newCmd, promptCmd, + rmCmd, viewCmd, ) return rootCmd diff --git a/pkg/cli/store.go b/pkg/cli/store.go index dced414..f25fdff 100644 --- a/pkg/cli/store.go +++ b/pkg/cli/store.go @@ -86,6 +86,11 @@ func (s *Store) SaveConversation(conversation *Conversation) error { return err } +func (s *Store) DeleteConversation(conversation *Conversation) error { + s.db.Where("conversation_id = ?", conversation.ID).Delete(&Message{}) + return s.db.Delete(&conversation).Error +} + func (s *Store) SaveMessage(message *Message) error { return s.db.Create(message).Error }