Skip to content

Commit a4e3a1d

Browse files
committed
refactor node and farm filtring and updating
1 parent fdfec21 commit a4e3a1d

File tree

4 files changed

+143
-328
lines changed

4 files changed

+143
-328
lines changed

node-registrar/client/farm.go

Lines changed: 50 additions & 121 deletions
Original file line numberDiff line numberDiff line change
@@ -20,97 +20,36 @@ func (c *RegistrarClient) CreateFarm(farmName, stellarAddr string, dedicated boo
2020
return c.createFarm(farmName, stellarAddr, dedicated)
2121
}
2222

23-
// UpdateFarm update farm configuration (farmName, stellarAddress, dedicated).
24-
func (c *RegistrarClient) UpdateFarm(farmID uint64, opts ...UpdateFarmOpts) (err error) {
25-
return c.updateFarm(farmID, opts)
23+
// UpdateFarm updates an existing farm's configuration
24+
func (c *RegistrarClient) UpdateFarm(farmID uint64, update FarmUpdate) (err error) {
25+
return c.updateFarm(farmID, update)
2626
}
2727

2828
// GetFarm get a farm using its farmID
2929
func (c *RegistrarClient) GetFarm(farmID uint64) (farm Farm, err error) {
3030
return c.getFarm(farmID)
3131
}
3232

33-
// ListFarms get a list of farm using ListFarmOpts
34-
func (c *RegistrarClient) ListFarms(opts ...ListFarmOpts) (farms []Farm, err error) {
35-
return c.listFarms(opts...)
33+
// ListFarms gets a list of farms using filter options
34+
func (c *RegistrarClient) ListFarms(filter FarmFilter) (farms []Farm, err error) {
35+
return c.listFarms(filter)
3636
}
3737

38-
type farmCfg struct {
39-
farmName string
40-
farmID uint64
41-
twinID uint64
42-
dedicated bool
43-
stellarAddress string
44-
page uint32
45-
size uint32
38+
// FarmUpdate represents the data needed to update an existing farm
39+
type FarmUpdate struct {
40+
FarmName *string
41+
StellarAddress *string
42+
Dedicated *bool
4643
}
4744

48-
type (
49-
ListFarmOpts func(*farmCfg)
50-
UpdateFarmOpts func(*farmCfg)
51-
)
52-
53-
// ListFarmWithName lists farms with farm name
54-
func ListFarmWithName(name string) ListFarmOpts {
55-
return func(n *farmCfg) {
56-
n.farmName = name
57-
}
58-
}
59-
60-
// ListFarmWithFarmID lists farms with farmID
61-
func ListFarmWithFarmID(id uint64) ListFarmOpts {
62-
return func(n *farmCfg) {
63-
n.farmID = id
64-
}
65-
}
66-
67-
// ListFarmWithTwinID lists farms with twinID
68-
func ListFarmWithTwinID(id uint64) ListFarmOpts {
69-
return func(n *farmCfg) {
70-
n.twinID = id
71-
}
72-
}
73-
74-
// ListFarmWithDedicated lists dedicated farms
75-
func ListFarmWithDedicated() ListFarmOpts {
76-
return func(n *farmCfg) {
77-
n.dedicated = true
78-
}
79-
}
80-
81-
// ListFarmWithPage lists farms in a certain page
82-
func ListFarmWithPage(page uint32) ListFarmOpts {
83-
return func(n *farmCfg) {
84-
n.page = page
85-
}
86-
}
87-
88-
// ListFarmWithPage lists size number of farms
89-
func ListFarmWithSize(size uint32) ListFarmOpts {
90-
return func(n *farmCfg) {
91-
n.size = size
92-
}
93-
}
94-
95-
// UpdateFarmWithName update farm name
96-
func UpdateFarmWithName(name string) UpdateFarmOpts {
97-
return func(n *farmCfg) {
98-
n.farmName = name
99-
}
100-
}
101-
102-
// UpdateFarmWithName set farm status to dedicated
103-
func UpdateFarmWithDedicated() UpdateFarmOpts {
104-
return func(n *farmCfg) {
105-
n.dedicated = true
106-
}
107-
}
108-
109-
// UpdateFarmWithName set farm status to dedicated
110-
func UpdateFarmWithStellarAddress(address string) UpdateFarmOpts {
111-
return func(n *farmCfg) {
112-
n.stellarAddress = address
113-
}
45+
// FarmFilter represents filtering options for listing farms
46+
type FarmFilter struct {
47+
FarmID *uint64
48+
FarmName *string
49+
TwinID *uint64
50+
Dedicated *bool
51+
Page *uint32
52+
Size *uint32
11453
}
11554

11655
func (c *RegistrarClient) createFarm(farmName, stellarAddr string, dedicated bool) (farmID uint64, err error) {
@@ -177,7 +116,7 @@ func (c *RegistrarClient) createFarm(farmName, stellarAddr string, dedicated boo
177116
return result.FarmID, nil
178117
}
179118

180-
func (c *RegistrarClient) updateFarm(farmID uint64, opts []UpdateFarmOpts) (err error) {
119+
func (c *RegistrarClient) updateFarm(farmID uint64, update FarmUpdate) (err error) {
181120
if err = c.ensureTwinID(); err != nil {
182121
return errors.Wrap(err, "failed to ensure twin id")
183122
}
@@ -188,7 +127,7 @@ func (c *RegistrarClient) updateFarm(farmID uint64, opts []UpdateFarmOpts) (err
188127
}
189128

190129
var body bytes.Buffer
191-
data := parseUpdateFarmOpts(opts)
130+
data := parseUpdateFarmOpts(update)
192131

193132
if stellarAddr, ok := data["stellar_address"]; ok {
194133
if err = validateStellarAddress(stellarAddr.(string)); err != nil {
@@ -224,7 +163,7 @@ func (c *RegistrarClient) updateFarm(farmID uint64, opts []UpdateFarmOpts) (err
224163

225164
if resp.StatusCode != http.StatusOK {
226165
err = parseResponseError(resp.Body)
227-
return errors.Wrapf(err, "failed to create farm with status code %s", resp.Status)
166+
return errors.Wrapf(err, "failed to update farm with status code %s", resp.Status)
228167
}
229168

230169
return
@@ -261,13 +200,13 @@ func (c *RegistrarClient) getFarm(id uint64) (farm Farm, err error) {
261200
return
262201
}
263202

264-
func (c *RegistrarClient) listFarms(opts ...ListFarmOpts) (farms []Farm, err error) {
203+
func (c *RegistrarClient) listFarms(filter FarmFilter) (farms []Farm, err error) {
265204
url, err := url.JoinPath(c.baseURL, "farms")
266205
if err != nil {
267206
return farms, errors.Wrap(err, "failed to construct registrar url")
268207
}
269208

270-
data := parseListFarmOpts(opts)
209+
data := parseListFarmOpts(filter)
271210

272211
req, err := http.NewRequest("GET", url, nil)
273212
if err != nil {
@@ -303,63 +242,53 @@ func (c *RegistrarClient) listFarms(opts ...ListFarmOpts) (farms []Farm, err err
303242
return
304243
}
305244

306-
func parseListFarmOpts(opts []ListFarmOpts) map[string]any {
307-
cfg := farmCfg{
308-
farmName: "",
309-
farmID: 0,
310-
twinID: 0,
311-
dedicated: false,
312-
page: 1,
313-
size: 50,
314-
}
245+
func parseListFarmOpts(filter FarmFilter) map[string]any {
246+
data := map[string]any{}
315247

316-
for _, opt := range opts {
317-
opt(&cfg)
248+
if filter.FarmName != nil && *filter.FarmName != "" {
249+
data["farm_name"] = *filter.FarmName
318250
}
319251

320-
data := map[string]any{}
321-
322-
if len(cfg.farmName) != 0 {
323-
data["farm_name"] = cfg.farmName
252+
if filter.FarmID != nil {
253+
data["farm_id"] = *filter.FarmID
324254
}
325255

326-
if cfg.farmID != 0 {
327-
data["farm_id"] = cfg.farmID
256+
if filter.TwinID != nil {
257+
data["twin_id"] = *filter.TwinID
328258
}
329259

330-
if cfg.twinID != 0 {
331-
data["twin_id"] = cfg.twinID
260+
if filter.Dedicated != nil {
261+
data["dedicated"] = *filter.Dedicated
332262
}
333263

334-
if cfg.dedicated {
335-
data["dedicated"] = true
264+
page := uint32(1)
265+
if filter.Page != nil {
266+
page = *filter.Page
336267
}
268+
data["page"] = page
337269

338-
data["page"] = cfg.page
339-
data["size"] = cfg.size
270+
size := uint32(50)
271+
if filter.Size != nil {
272+
size = *filter.Size
273+
}
274+
data["size"] = size
340275

341276
return data
342277
}
343278

344-
func parseUpdateFarmOpts(opts []UpdateFarmOpts) map[string]any {
345-
cfg := farmCfg{}
346-
347-
for _, opt := range opts {
348-
opt(&cfg)
349-
}
350-
279+
func parseUpdateFarmOpts(update FarmUpdate) map[string]any {
351280
data := map[string]any{}
352281

353-
if len(cfg.farmName) != 0 {
354-
data["farm_name"] = cfg.farmName
282+
if update.FarmName != nil {
283+
data["farm_name"] = *update.FarmName
355284
}
356285

357-
if cfg.dedicated {
358-
data["dedicated"] = true
286+
if update.StellarAddress != nil {
287+
data["stellar_address"] = *update.StellarAddress
359288
}
360289

361-
if len(cfg.stellarAddress) != 0 {
362-
data["stellar_address"] = cfg.stellarAddress
290+
if update.Dedicated != nil {
291+
data["dedicated"] = *update.Dedicated
363292
}
364293

365294
return data

node-registrar/client/farm_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,8 @@ func TestUpdateFarm(t *testing.T) {
7777
require.NoError(err)
7878

7979
request = updateFarmWithStatusUnauthorized
80-
err = c.UpdateFarm(farmID, UpdateFarmWithName("notFreeFarm"))
80+
name := "notFreeFarm"
81+
err = c.UpdateFarm(farmID, FarmUpdate{FarmName: &name})
8182
require.Error(err)
8283
})
8384

@@ -88,7 +89,8 @@ func TestUpdateFarm(t *testing.T) {
8889
require.NoError(err)
8990

9091
request = updateFarmWithStatusOK
91-
err = c.UpdateFarm(farmID, UpdateFarmWithName("notFreeFarm"))
92+
name := "notFreeFarm"
93+
err = c.UpdateFarm(farmID, FarmUpdate{FarmName: &name})
9294
require.NoError(err)
9395
})
9496
}

0 commit comments

Comments
 (0)