/
cluster.go
73 lines (60 loc) · 1.69 KB
/
cluster.go
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
package cluster
import (
"fmt"
"os"
"github.com/fatih/structs"
"github.com/olekukonko/tablewriter"
"github.com/xn3cr0nx/bitgodine/internal/storage/db/postgres"
"github.com/xn3cr0nx/bitgodine/pkg/cache"
)
// Service interface exports available methods for block service
type Service interface {
GetClusters(output bool) (tags []Model, err error)
CreateCluster(t *Model) (err error)
GetCluster(address string, output bool) (tags []Model, err error)
}
type service struct {
Repository *postgres.Pg
Cache *cache.Cache
}
// NewService instantiates a new Service layer for customer
func NewService(r *postgres.Pg, c *cache.Cache) *service {
return &service{
Repository: r,
Cache: c,
}
}
func printClustersTable(clusters []Model) {
table := tablewriter.NewWriter(os.Stdout)
table.SetHeader(structs.Names(clusters[0]))
table.SetBorder(false)
for _, cluster := range clusters {
table.Append([]string{cluster.Address, fmt.Sprintf("%d", cluster.Cluster)})
}
table.Render()
}
// GetClusters retrieve whole clusters list
func (s *service) GetClusters(output bool) (clusters []Model, err error) {
if err = s.Repository.Find(&clusters).Error; err != nil {
return
}
if output {
printClustersTable(clusters)
}
return
}
// CreateCluster creates a new cluster record
func (s *service) CreateCluster(t *Model) (err error) {
err = s.Repository.Model(&Model{}).Create(t).Error
return
}
// GetCluster retrieve clusters related to passed address
func (s *service) GetCluster(address string, output bool) (clusters []Model, err error) {
if err = s.Repository.Where("address = ?", address).Find(&clusters).Error; err != nil {
return
}
if output {
printClustersTable(clusters)
}
return
}