all repos — postern

@ 2ce71531efbc5f05cb4c6abfa43ef6a818e78c35

Modern mail management

clone
git clone https:///postern.git

internal/cli/prune.go (view raw)

 1package cli
 2
 3import (
 4	"context"
 5	"fmt"
 6
 7	"github.com/spf13/cobra"
 8)
 9
10// PruneMails prunes orphaned mails and returns the count of pruned messages.
11func (c *Command) PruneMails(ctx context.Context) (int, error) {
12	targets, err := c.db.GetPrunableTargets(ctx)
13	if err != nil {
14		return 0, err
15	}
16
17	count := 0
18	for _, target := range targets {
19		err = c.persistence.RemoveBlob(target.BlobHash)
20		if err != nil {
21			return count, err
22		}
23		err = c.db.DeleteMessage(ctx, target.MessageID)
24		if err != nil {
25			return count, err
26		}
27		count++
28	}
29
30	return count, nil
31}
32
33func (c *Command) pruneMails(cmd *cobra.Command, _ []string) error {
34	fmt.Println("Pruning in progress...")
35
36	count, err := c.clientPruneMails(cmd.Context())
37	if err != nil {
38		return err
39	}
40
41	fmt.Printf("Pruning complete. %d messages pruned.\n", count)
42	return nil
43}