Skip to content

Commit 20721e2

Browse files
authored
Implement reconciliation of category for create/update/delete categor… (#5)
* Implement reconciliation of category for create/update/delete categories using pure API calls, create controller that makes client connection using ProviderConfig credentials. * reworked reconciliation controller to GET/CREATE/UPDATE/DELETE categories by id, added functions descriptions and error checks
1 parent 894d9e4 commit 20721e2

File tree

14 files changed

+294
-88
lines changed

14 files changed

+294
-88
lines changed

apis/category/v1alpha1/category_types.go

+10-11
Original file line numberDiff line numberDiff line change
@@ -34,29 +34,28 @@ type CustomAttributes struct {
3434
// CategoryParameters are the configurable fields of a Category.
3535
type CategoryParameters struct {
3636
Name string `json:"name,omitempty"`
37-
ID int `json:"id,omitempty"`
38-
IsActive bool `json:"is_active,omitempty"`
37+
IsActive bool `json:"isActive,omitempty"`
3938
Position int `json:"position,omitempty"`
4039
Level int `json:"level,omitempty"`
4140
Children string `json:"children,omitempty"`
42-
CreatedAt string `json:"created_at,omitempty"`
43-
UpdatedAt string `json:"updated_at,omitempty"`
41+
CreatedAt string `json:"createdAt,omitempty"`
42+
UpdatedAt string `json:"updatedAt,omitempty"`
4443
Path string `json:"path,omitempty"`
45-
AvailableSortBy []string `json:"available_sort_by,omitempty"`
46-
IncludeInMenu bool `json:"include_in_menu,omitempty"`
47-
CustomAttributes []CustomAttributes `json:"custom_attributes,omitempty"`
48-
ParentID int `json:"parent_id,omitempty"`
44+
AvailableSortBy []string `json:"availableSortBy,omitempty"`
45+
IncludeInMenu bool `json:"includeInMenu,omitempty"`
46+
CustomAttributes []CustomAttributes `json:"customAttributes,omitempty"`
47+
ParentID int `json:"parentId,omitempty"`
4948
}
5049

5150
// CategoryObservation are the observable fields of a Category.
5251
type CategoryObservation struct {
5352
ID int `json:"id,omitempty"`
54-
ParentID int `json:"parent_id,omitempty"`
53+
ParentID int `json:"parentId,omitempty"`
5554
Name string `json:"name,omitempty"`
56-
IsActive bool `json:"is_active,omitempty"`
55+
IsActive bool `json:"isActive,omitempty"`
5756
Position int `json:"position,omitempty"`
5857
Level int `json:"level,omitempty"`
59-
ProductCount int `json:"product_count,omitempty"`
58+
ProductCount int `json:"productCount,omitempty"`
6059
}
6160

6261
// A CategorySpec defines the desired state of a Category.

apis/category/v1alpha1/groupversion_info.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ limitations under the License.
1616

1717
// Package v1alpha1 contains the v1alpha1 group Sample resources of the Magento provider.
1818
// +kubebuilder:object:generate=true
19-
// +groupName=category.magento.web7.md
19+
// +groupName=magento.web7.md
2020
// +versionName=v1alpha1
2121
package v1alpha1
2222

@@ -27,7 +27,7 @@ import (
2727

2828
// Package type metadata.
2929
const (
30-
Group = "category.magento.web7.md"
30+
Group = "magento.web7.md"
3131
Version = "v1alpha1"
3232
)
3333

apis/v1alpha1/providerconfig_types.go

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727

2828
// A ProviderConfigSpec defines the desired state of a ProviderConfig.
2929
type ProviderConfigSpec struct {
30+
MagentoURL string `json:"magentoUrl"`
3031
// Credentials required to authenticate to this provider.
3132
Credentials ProviderCredentials `json:"credentials"`
3233
}

examples/provider/config.yaml

+7-6
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
11
apiVersion: v1
22
kind: Secret
33
metadata:
4-
namespace: crossplane-system
4+
namespace: default
55
name: example-provider-secret
66
type: Opaque
77
data:
8-
# credentials: BASE64ENCODED_PROVIDER_CREDS
8+
creds: ""
99
---
10-
apiVersion: magento.crossplane.io/v1alpha1
10+
apiVersion: magento.web7.md/v1alpha1
1111
kind: ProviderConfig
1212
metadata:
13-
name: example
13+
name: category-provider-config
1414
spec:
15+
hostName: ""
1516
credentials:
1617
source: Secret
1718
secretRef:
18-
namespace: crossplane-system
19+
namespace: default
1920
name: example-provider-secret
20-
key: credentials
21+
key: creds

examples/sample/category.yaml

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
apiVersion: magento.web7.md/v1alpha1
2+
kind: Category
3+
metadata:
4+
name: example-category
5+
spec:
6+
forProvider:
7+
name: "Example Category"
8+
level: 2
9+
position: 1
10+
isActive: true
11+
includeInMenu: false
12+
providerConfigRef:
13+
name: category-provider-config

examples/sample/mytype.yaml

-9
This file was deleted.

go.mod

+6-5
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ require (
3131
github.com/go-openapi/jsonpointer v0.19.6 // indirect
3232
github.com/go-openapi/jsonreference v0.20.2 // indirect
3333
github.com/go-openapi/swag v0.22.3 // indirect
34+
github.com/go-resty/resty/v2 v2.13.0
3435
github.com/gobuffalo/flect v1.0.2 // indirect
3536
github.com/gogo/protobuf v1.3.2 // indirect
3637
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
@@ -60,13 +61,13 @@ require (
6061
go.uber.org/multierr v1.11.0 // indirect
6162
go.uber.org/zap v1.24.0 // indirect
6263
golang.org/x/mod v0.17.0 // indirect
63-
golang.org/x/net v0.24.0 // indirect
64+
golang.org/x/net v0.25.0 // indirect
6465
golang.org/x/oauth2 v0.8.0 // indirect
6566
golang.org/x/sync v0.7.0 // indirect
66-
golang.org/x/sys v0.19.0 // indirect
67-
golang.org/x/term v0.19.0 // indirect
68-
golang.org/x/text v0.14.0 // indirect
69-
golang.org/x/time v0.3.0 // indirect
67+
golang.org/x/sys v0.20.0 // indirect
68+
golang.org/x/term v0.20.0 // indirect
69+
golang.org/x/text v0.15.0 // indirect
70+
golang.org/x/time v0.5.0 // indirect
7071
golang.org/x/tools v0.20.0 // indirect
7172
gomodules.xyz/jsonpatch/v2 v2.3.0 // indirect
7273
google.golang.org/appengine v1.6.7 // indirect

go.sum

+37-9
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,8 @@ github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2Kv
107107
github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k=
108108
github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g=
109109
github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
110+
github.com/go-resty/resty/v2 v2.13.0 h1:joaL6wxSgm1OZal4FAAyddkL1T4uo5NxHYFkGmUusqE=
111+
github.com/go-resty/resty/v2 v2.13.0/go.mod h1:GznXlLxkq6Nh4sU59rPmUw3VtgpO3aS96ORAI6Q7d+0=
110112
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
111113
github.com/gobuffalo/flect v1.0.2 h1:eqjPGSo2WmjgY2XlpGwo2NXgL3RucAKo4k4qQMNA5sA=
112114
github.com/gobuffalo/flect v1.0.2/go.mod h1:A5msMlrHtLqh9umBSnvabjsMrCcCpAyzglnDvkbYKHs=
@@ -276,6 +278,7 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
276278
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
277279
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
278280
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
281+
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
279282
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
280283
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
281284
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
@@ -299,7 +302,10 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U
299302
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
300303
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
301304
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
305+
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
302306
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
307+
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
308+
golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
303309
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
304310
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
305311
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -334,6 +340,8 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
334340
golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
335341
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
336342
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
343+
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
344+
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
337345
golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA=
338346
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
339347
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -370,8 +378,12 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v
370378
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
371379
golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
372380
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
373-
golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
374-
golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
381+
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
382+
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
383+
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
384+
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
385+
golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac=
386+
golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
375387
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
376388
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
377389
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -394,6 +406,8 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ
394406
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
395407
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
396408
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
409+
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
410+
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
397411
golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
398412
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
399413
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -433,13 +447,22 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w
433447
golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
434448
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
435449
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
450+
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
451+
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
436452
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
437453
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
438-
golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
439-
golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
454+
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
455+
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
456+
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
457+
golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
458+
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
440459
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
441-
golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q=
442-
golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk=
460+
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
461+
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
462+
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
463+
golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
464+
golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw=
465+
golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
443466
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
444467
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
445468
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -449,13 +472,16 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
449472
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
450473
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
451474
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
452-
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
475+
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
476+
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
453477
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
478+
golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk=
479+
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
454480
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
455481
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
456482
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
457-
golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
458-
golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
483+
golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
484+
golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
459485
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
460486
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
461487
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
@@ -506,6 +532,8 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f
506532
golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
507533
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
508534
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
535+
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
536+
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
509537
golang.org/x/tools v0.20.0 h1:hz/CVckiOxybQvFw6h7b/q80NTr9IUQb4s1IIzW7KNY=
510538
golang.org/x/tools v0.20.0/go.mod h1:WvitBU7JJf6A4jOdg4S1tviW9bhUxkgeCui/0JHctQg=
511539
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+115
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
// Package categories provides functions for interacting with Magento categories.
2+
package categories
3+
4+
import (
5+
"encoding/json"
6+
"errors"
7+
"net/url"
8+
"strconv"
9+
10+
"github.com/go-resty/resty/v2"
11+
"github.com/web-seven/provider-magento/apis/category/v1alpha1"
12+
13+
magento "github.com/web-seven/provider-magento/internal/client"
14+
)
15+
16+
// Client is a struct that embeds the magento.Client struct.
17+
type Client struct {
18+
magento.Client
19+
}
20+
21+
// categoriesPath is the path for the Magento categories API.
22+
const categoriesPath = "/rest/default/V1/categories/"
23+
24+
// GetCategoryByID retrieves a category by its ID.
25+
func GetCategoryByID(c *magento.Client, id string) (*v1alpha1.Category, error) {
26+
queryParams := map[string]string{
27+
"searchCriteria[filterGroups][0][filters][0][field]": "entity_id",
28+
"searchCriteria[filterGroups][0][filters][0][value]": id,
29+
}
30+
query := url.Values{}
31+
for key, value := range queryParams {
32+
query.Add(key, value)
33+
}
34+
resp, err := c.Create().R().SetQueryParams(queryParams).Get(categoriesPath + "list")
35+
36+
if err != nil {
37+
return nil, err
38+
}
39+
40+
var searchResults struct {
41+
Items []v1alpha1.CategoryParameters `json:"items"`
42+
}
43+
err = json.Unmarshal(resp.Body(), &searchResults)
44+
if err != nil {
45+
return nil, err
46+
}
47+
48+
if len(searchResults.Items) > 0 {
49+
category := v1alpha1.Category{
50+
Spec: v1alpha1.CategorySpec{
51+
ForProvider: searchResults.Items[0],
52+
},
53+
}
54+
return &category, nil
55+
} else {
56+
return nil, errors.New("category not found")
57+
}
58+
}
59+
60+
// CreateCategory creates a new category.
61+
func CreateCategory(c *magento.Client, category *v1alpha1.Category) (*v1alpha1.CategoryObservation, *resty.Response, error) {
62+
requestBody := map[string]interface{}{
63+
"category": category.Spec.ForProvider,
64+
}
65+
66+
resp, err := c.Create().R().SetHeader("Content-Type", "application/json").SetBody(requestBody).Post(categoriesPath)
67+
if err != nil {
68+
return nil, nil, err
69+
}
70+
71+
var categoryObservation *v1alpha1.CategoryObservation
72+
err = json.Unmarshal(resp.Body(), &categoryObservation)
73+
if err != nil {
74+
return nil, nil, err
75+
}
76+
77+
return categoryObservation, resp, nil
78+
}
79+
80+
// UpdateCategoryByID updates a category by its ID.
81+
func UpdateCategoryByID(c *magento.Client, id int, observed *v1alpha1.Category) error {
82+
requestBody := map[string]interface{}{
83+
"category": observed.Spec.ForProvider,
84+
}
85+
86+
_, err := c.Create().R().SetBody(requestBody).Put(categoriesPath + strconv.Itoa(id))
87+
if err != nil {
88+
return err
89+
}
90+
91+
return nil
92+
}
93+
94+
// DeleteCategoryByID deletes a category by its ID.
95+
func DeleteCategoryByID(c *magento.Client, id int) error {
96+
_, err := c.Create().R().Delete(categoriesPath + strconv.Itoa(id))
97+
return err
98+
}
99+
100+
// IsUpToDate checks if the observed category is up to date with the desired category.
101+
func IsUpToDate(observed *v1alpha1.Category, desired *v1alpha1.Category) (bool, error) {
102+
if observed == nil || desired == nil {
103+
return false, errors.New("observed or desired category is nil")
104+
}
105+
106+
if observed.Spec.ForProvider.Name != desired.Spec.ForProvider.Name ||
107+
observed.Spec.ForProvider.IncludeInMenu != desired.Spec.ForProvider.IncludeInMenu ||
108+
observed.Spec.ForProvider.ParentID != desired.Spec.ForProvider.ParentID ||
109+
observed.Spec.ForProvider.Position != desired.Spec.ForProvider.Position ||
110+
observed.Spec.ForProvider.Level != desired.Spec.ForProvider.Level {
111+
return false, nil
112+
}
113+
114+
return true, nil
115+
}

0 commit comments

Comments
 (0)