summaryrefslogtreecommitdiffstats
path: root/cmd/commands/holdings.go
blob: 8f3cef348b2d4df86e07c471bb67bed4e55076ee (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package cmd

import (
	"fmt"

	"github.com/miguelmota/cointop/cointop"
	"github.com/spf13/cobra"
)

// HoldingsCmd ...
func HoldingsCmd() *cobra.Command {
	var help bool
	var total bool
	var percentChange24H bool
	var noCache bool
	var noHeader bool
	var config string
	var sortBy string
	var sortDesc bool
	var format string = "table"
	var humanReadable bool
	var filter []string
	var cols []string
	var convert string

	holdingsCmd := &cobra.Command{
		Use:   "holdings",
		Short: "Displays current holdings",
		Long:  `The holdings command shows your current holdings`,
		RunE: func(cmd *cobra.Command, args []string) error {
			if help {
				return cmd.Help()
			}

			ct, err := cointop.NewCointop(&cointop.Config{
				ConfigFilepath: config,
				CacheDir:       cointop.DefaultCacheDir,
			})
			if err != nil {
				return err
			}

			if total || percentChange24H {
				if percentChange24H {
					return ct.PrintHoldings24HChange(&cointop.TablePrintOptions{
						HumanReadable: humanReadable,
						Format:        format,
						Filter:        filter,
						Convert:       convert,
					})
				}
				if total {
					return ct.PrintHoldingsTotal(&cointop.TablePrintOptions{
						HumanReadable: humanReadable,
						Format:        format,
						Filter:        filter,
						Convert:       convert,
					})
				}
			}

			return ct.PrintHoldingsTable(&cointop.TablePrintOptions{
				SortBy:        sortBy,
				SortDesc:      sortDesc,
				HumanReadable: humanReadable,
				Format:        format,
				Filter:        filter,
				Cols:          cols,
				Convert:       convert,
				NoHeader:      noHeader,
			})
		},
	}

	holdingsCmd.Flags().BoolVarP(&help, "help", "", help, "Help for holdings")
	holdingsCmd.Flags().BoolVarP(&total, "total", "t", total, "Show portfolio total only")
	holdingsCmd.Flags().BoolVarP(&percentChange24H, "24h", "", percentChange24H, "Show portfolio 24H change only")
	holdingsCmd.Flags().BoolVarP(&noCache, "no-cache", "", noCache, "No cache")
	holdingsCmd.Flags().BoolVarP(&humanReadable, "human", "h", humanReadable, "Human readable output")
	holdingsCmd.Flags().BoolVarP(&noHeader, "no-header", "", noHeader, "Don't display header columns")
	holdingsCmd.Flags().StringVarP(&config, "config", "c", "", fmt.Sprintf("Config filepath. (default %s)", cointop.DefaultConfigFilepath))
	holdingsCmd.Flags().StringVarP(&sortBy, "sort-by", "s", sortBy, `Sort by column. Options are "name", "symbol", "price", "holdings", "balance", "24h"`)
	holdingsCmd.Flags().BoolVarP(&sortDesc, "sort-desc", "d", sortDesc, "Sort in descending order")
	holdingsCmd.Flags().StringVarP(&format, "format", "", format, `Ouput format. Options are "table", "csv", "json"`)
	holdingsCmd.Flags().StringSliceVarP(&filter, "filter", "", filter, `Filter portfolio entries by coin name or symbol, comma separated without spaces. Example: "btc,eth,doge"`)
	holdingsCmd.Flags().StringSliceVarP(&cols, "cols", "", cols, `Filter portfolio columns, comma separated without spaces. Example: "symbol,holdings,balance"`)
	holdingsCmd.Flags().StringVarP(&convert, "convert", "f", convert, "The currency to convert to")

	return holdingsCmd
}