Skip to content

Commit 912b693

Browse files
author
Andrew Jeffery
committed
fix(list_item): Use proper pagination from client
1 parent e7cf3c3 commit 912b693

File tree

3 files changed

+105
-61
lines changed

3 files changed

+105
-61
lines changed

go.mod

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ require (
99
github.com/aws/aws-sdk-go-v2/config v1.27.36
1010
github.com/aws/aws-sdk-go-v2/credentials v1.17.34
1111
github.com/aws/aws-sdk-go-v2/service/s3 v1.63.0
12-
github.com/cloudflare/cloudflare-go v0.104.0
13-
github.com/cloudflare/cloudflare-go/v5 v5.0.0
12+
github.com/cloudflare/cloudflare-go v0.115.0
13+
github.com/cloudflare/cloudflare-go/v5 v5.0.1-0.20250811130229-fc80733ed1bb
1414
github.com/davecgh/go-spew v1.1.1
1515
github.com/hashicorp/go-uuid v1.0.3
1616
github.com/hashicorp/terraform-plugin-docs v0.21.0
@@ -24,11 +24,11 @@ require (
2424
github.com/hashicorp/terraform-plugin-testing v1.13.2
2525
github.com/jinzhu/copier v0.4.0
2626
github.com/pkg/errors v0.9.1
27-
github.com/stretchr/testify v1.9.0
28-
github.com/tidwall/gjson v1.14.4
27+
github.com/stretchr/testify v1.10.0
28+
github.com/tidwall/gjson v1.18.0
2929
github.com/tidwall/sjson v1.2.5
3030
golang.org/x/exp v0.0.0-20230809150735-7b3493d9a819
31-
golang.org/x/text v0.26.0
31+
golang.org/x/text v0.28.0
3232
)
3333

3434
require (
@@ -59,7 +59,7 @@ require (
5959
github.com/bmatcuk/doublestar/v4 v4.8.1 // indirect
6060
github.com/cloudflare/circl v1.6.1 // indirect
6161
github.com/fatih/color v1.16.0 // indirect
62-
github.com/goccy/go-json v0.10.3 // indirect
62+
github.com/goccy/go-json v0.10.5 // indirect
6363
github.com/golang/protobuf v1.5.4 // indirect
6464
github.com/google/go-cmp v0.7.0 // indirect
6565
github.com/google/go-querystring v1.1.0 // indirect
@@ -107,13 +107,13 @@ require (
107107
github.com/yuin/goldmark-meta v1.1.0 // indirect
108108
github.com/zclconf/go-cty v1.16.3 // indirect
109109
go.abhg.dev/goldmark/frontmatter v0.2.0 // indirect
110-
golang.org/x/crypto v0.39.0 // indirect
111-
golang.org/x/mod v0.25.0 // indirect
112-
golang.org/x/net v0.40.0 // indirect
113-
golang.org/x/sync v0.15.0 // indirect
114-
golang.org/x/sys v0.33.0 // indirect
115-
golang.org/x/time v0.6.0 // indirect
116-
golang.org/x/tools v0.33.0 // indirect
110+
golang.org/x/crypto v0.41.0 // indirect
111+
golang.org/x/mod v0.26.0 // indirect
112+
golang.org/x/net v0.43.0 // indirect
113+
golang.org/x/sync v0.16.0 // indirect
114+
golang.org/x/sys v0.35.0 // indirect
115+
golang.org/x/time v0.12.0 // indirect
116+
golang.org/x/tools v0.35.0 // indirect
117117
google.golang.org/appengine v1.6.8 // indirect
118118
google.golang.org/genproto/googleapis/rpc v0.0.0-20250313205543-e70fdf4c4cb4 // indirect
119119
google.golang.org/grpc v1.72.1 // indirect

go.sum

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,10 @@ github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZ
6565
github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8=
6666
github.com/cloudflare/circl v1.6.1 h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0=
6767
github.com/cloudflare/circl v1.6.1/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs=
68-
github.com/cloudflare/cloudflare-go v0.104.0 h1:R/lB0dZupaZbOgibAH/BRrkFbZ6Acn/WsKg2iX2xXuY=
69-
github.com/cloudflare/cloudflare-go v0.104.0/go.mod h1:pfUQ4PIG4ISI0/Mmc21Bp86UnFU0ktmPf3iTgbSL+cM=
70-
github.com/cloudflare/cloudflare-go/v5 v5.0.0 h1:t1N+0YADVAcnL1HL3FRUqPgDvCtbj2YJwxUYxLnEoyY=
71-
github.com/cloudflare/cloudflare-go/v5 v5.0.0/go.mod h1:C6OjOlDHOk/g7lXehothXJRFZrSIJMLzOZB2SXQhcjk=
68+
github.com/cloudflare/cloudflare-go v0.115.0 h1:84/dxeeXweCc0PN5Cto44iTA8AkG1fyT11yPO5ZB7sM=
69+
github.com/cloudflare/cloudflare-go v0.115.0/go.mod h1:Ds6urDwn/TF2uIU24mu7H91xkKP8gSAHxQ44DSZgVmU=
70+
github.com/cloudflare/cloudflare-go/v5 v5.0.1-0.20250811130229-fc80733ed1bb h1:nDhXAtTgRzRzHbUXJ1V1pBjZhOPnZN22q9qxg1UFj/k=
71+
github.com/cloudflare/cloudflare-go/v5 v5.0.1-0.20250811130229-fc80733ed1bb/go.mod h1:C6OjOlDHOk/g7lXehothXJRFZrSIJMLzOZB2SXQhcjk=
7272
github.com/cyphar/filepath-securejoin v0.4.1 h1:JyxxyPEaktOD+GAnqIqTf9A8tHyAG22rowi7HkoSU1s=
7373
github.com/cyphar/filepath-securejoin v0.4.1/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI=
7474
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -93,8 +93,8 @@ github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
9393
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
9494
github.com/go-test/deep v1.0.3 h1:ZrJSEWsXzPOxaZnFteGEfooLba+ju3FYIbOrS+rQd68=
9595
github.com/go-test/deep v1.0.3/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
96-
github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA=
97-
github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
96+
github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4=
97+
github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
9898
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ=
9999
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw=
100100
github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -243,11 +243,11 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf
243243
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
244244
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
245245
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
246-
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
247-
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
246+
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
247+
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
248248
github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
249-
github.com/tidwall/gjson v1.14.4 h1:uo0p8EbA09J7RQaflQ1aBRffTR7xedD2bcIVSYxLnkM=
250-
github.com/tidwall/gjson v1.14.4/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
249+
github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY=
250+
github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
251251
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
252252
github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
253253
github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
@@ -290,25 +290,25 @@ go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h
290290
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
291291
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
292292
golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
293-
golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM=
294-
golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U=
293+
golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4=
294+
golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
295295
golang.org/x/exp v0.0.0-20230809150735-7b3493d9a819 h1:EDuYyU/MkFXllv9QF9819VlI9a4tzGuCbhG0ExK9o1U=
296296
golang.org/x/exp v0.0.0-20230809150735-7b3493d9a819/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc=
297297
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
298-
golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w=
299-
golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww=
298+
golang.org/x/mod v0.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg=
299+
golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ=
300300
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
301301
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
302302
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
303303
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
304304
golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
305-
golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY=
306-
golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds=
305+
golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
306+
golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
307307
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
308308
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
309309
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
310-
golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8=
311-
golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
310+
golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
311+
golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
312312
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
313313
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
314314
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -321,8 +321,8 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc
321321
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
322322
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
323323
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
324-
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
325-
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
324+
golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
325+
golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
326326
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
327327
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
328328
golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
@@ -331,15 +331,15 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
331331
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
332332
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
333333
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
334-
golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M=
335-
golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA=
336-
golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U=
337-
golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
334+
golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng=
335+
golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU=
336+
golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE=
337+
golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg=
338338
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
339339
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
340340
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
341-
golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc=
342-
golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI=
341+
golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0=
342+
golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw=
343343
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
344344
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
345345
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=

internal/services/list_item/resource.go

Lines changed: 66 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ import (
1313

1414
"github.com/cloudflare/cloudflare-go/v5"
1515
"github.com/cloudflare/cloudflare-go/v5/option"
16-
"github.com/cloudflare/cloudflare-go/v5/packages/pagination"
1716
"github.com/cloudflare/cloudflare-go/v5/rules"
1817
"github.com/cloudflare/terraform-provider-cloudflare/internal/apijson"
18+
"github.com/cloudflare/terraform-provider-cloudflare/internal/customfield"
1919
"github.com/cloudflare/terraform-provider-cloudflare/internal/importpath"
2020
"github.com/cloudflare/terraform-provider-cloudflare/internal/logging"
2121
"github.com/hashicorp/terraform-plugin-framework/resource"
@@ -109,39 +109,29 @@ func (r *ListItemResource) Create(ctx context.Context, req resource.CreateReques
109109

110110
searchTerm := getSearchTerm(data)
111111
findItemRes := new(http.Response)
112-
listItems, err := r.client.Rules.Lists.Items.List(
112+
listItems := r.client.Rules.Lists.Items.ListAutoPaging(
113113
ctx,
114114
data.ListID.ValueString(),
115115
rules.ListItemListParams{
116116
AccountID: cloudflare.F(data.AccountID.ValueString()),
117117
Search: cloudflare.F(searchTerm),
118-
// TODO: when pagination is fixed in the API schema (and go sdk) we should not need to set this (items we are looking for are expected to be sorted near the top of the result list)
119-
PerPage: cloudflare.Int(500),
120118
},
121119
option.WithResponseBodyInto(&findItemRes),
122120
option.WithMiddleware(logging.Middleware(ctx)),
123121
option.WithRequestTimeout(time.Second*3),
124122
)
125-
if err != nil {
126-
resp.Diagnostics.AddError("failed to fetch individual list item", err.Error())
123+
if listItems.Err() != nil {
124+
resp.Diagnostics.AddError("failed to fetch individual list item", listItems.Err().Error())
127125
return
128126
}
129127
if listItems == nil {
130128
resp.Diagnostics.AddWarning("failed to fetch individual list item", "list item pagination was nil")
131129
}
132130

133-
listItemsBytes, _ := io.ReadAll(findItemRes.Body)
134-
135-
// TODO: when pagination is fixed in the API schema (and go sdk) this should paginate properly
136-
var apiResult pagination.SinglePage[ListItemModel]
137-
err = apijson.Unmarshal(listItemsBytes, &apiResult)
138-
if err != nil {
139-
resp.Diagnostics.AddError("failed to fetch individual list item", err.Error())
140-
}
141-
142131
// find the actual list item, don't rely on the response to have the first entry be the correct one
143132
var listItemID string
144-
for _, item := range apiResult.Result {
133+
for listItems.Next() {
134+
item := listItems.Current()
145135
if matchedItemID, ok := listItemMatchesOriginal(data, item); ok {
146136
listItemID = matchedItemID
147137
break
@@ -374,22 +364,76 @@ func getSearchTerm(d *ListItemModel) string {
374364
return ""
375365
}
376366

377-
func listItemMatchesOriginal(original *ListItemModel, item ListItemModel) (string, bool) {
378-
if original.IP != item.IP {
367+
func listItemMatchesOriginal(original *ListItemModel, item rules.ListItemListResponse) (string, bool) {
368+
if original.IP.ValueString() != item.IP {
379369
return "", false
380370
}
381371

382-
if original.ASN != item.ASN {
372+
if original.ASN.ValueInt64() != item.ASN {
383373
return "", false
384374
}
385375

386-
if !original.Hostname.IsNull() && !item.Hostname.IsNull() && !original.Hostname.Equal(item.Hostname) {
376+
if !original.Hostname.IsNull() && !hostnameEqual(original.Hostname, item.Hostname) {
387377
return "", false
388378
}
389379

390-
if !original.Redirect.IsNull() && !item.Redirect.IsNull() && !original.Redirect.Equal(item.Redirect) {
380+
if !original.Redirect.IsNull() && redirectEqual(original.Redirect, item.Redirect) {
391381
return "", false
392382
}
393383

394-
return item.ID.ValueString(), true
384+
return item.ID, true
385+
}
386+
387+
func hostnameEqual(original customfield.NestedObject[ListItemHostnameModel], item rules.Hostname) bool {
388+
originalVal, err := original.Value(context.TODO())
389+
if err != nil {
390+
return false
391+
}
392+
393+
if originalVal.URLHostname.ValueString() != item.URLHostname {
394+
return false
395+
}
396+
397+
if originalVal.ExcludeExactHostname.ValueBool() != item.ExcludeExactHostname {
398+
return false
399+
}
400+
401+
return true
402+
}
403+
404+
func redirectEqual(original customfield.NestedObject[ListItemRedirectModel], item rules.Redirect) bool {
405+
originalVal, err := original.Value(context.TODO())
406+
if err != nil {
407+
return false
408+
}
409+
410+
if originalVal.SourceURL.ValueString() != item.SourceURL {
411+
return false
412+
}
413+
414+
if originalVal.TargetURL.ValueString() != item.TargetURL {
415+
return false
416+
}
417+
418+
if originalVal.IncludeSubdomains.ValueBool() != item.IncludeSubdomains {
419+
return false
420+
}
421+
422+
if originalVal.PreservePathSuffix.ValueBool() != item.PreservePathSuffix {
423+
return false
424+
}
425+
426+
if originalVal.PreserveQueryString.ValueBool() != item.PreserveQueryString {
427+
return false
428+
}
429+
430+
if originalVal.StatusCode.ValueInt64() != int64(item.StatusCode) {
431+
return false
432+
}
433+
434+
if originalVal.SubpathMatching.ValueBool() != item.SubpathMatching {
435+
return false
436+
}
437+
438+
return true
395439
}

0 commit comments

Comments
 (0)