Skip to content

Commit 85f1e9e

Browse files
KinyaElGrandekelanik8
authored andcommitted
Add namespace blocks on the BE
1 parent 2cb8c1e commit 85f1e9e

14 files changed

Lines changed: 177 additions & 2 deletions

File tree

server/compose/envoy/yaml_decode.gen.go

Lines changed: 19 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

server/compose/envoy/yaml_decode.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,40 @@ func (d *auxYamlDoc) unmarshalPageBlocksNode(r *types.Page, n *yaml.Node) (refs
103103
return
104104
}
105105

106+
func (d *auxYamlDoc) unmarshalNamespaceBlocksNode(r *types.Namespace, n *yaml.Node) (refs map[string]envoyx.Ref, idents envoyx.Identifiers, err error) {
107+
refs = map[string]envoyx.Ref{}
108+
109+
for index, b := range r.Blocks {
110+
switch b.Kind {
111+
case "RecordList":
112+
refs = envoyx.MergeRefs(refs, getPageBlockRecordListRefs(b, index))
113+
114+
case "Automation":
115+
refs = envoyx.MergeRefs(refs, getPageBlockAutomationRefs(b, index))
116+
117+
case "RecordOrganizer":
118+
refs = envoyx.MergeRefs(refs, getPageBlockRecordOrganizerRefs(b, index))
119+
120+
case "Chart":
121+
refs = envoyx.MergeRefs(refs, getPageBlockChartRefs(b, index))
122+
123+
case "Calendar":
124+
refs = envoyx.MergeRefs(refs, getPageBlockCalendarRefs(b, index))
125+
126+
case "Metric":
127+
refs = envoyx.MergeRefs(refs, getPageBlockMetricRefs(b, index))
128+
129+
case "Comment":
130+
refs = envoyx.MergeRefs(refs, getPageBlockCommentRefs(b, index))
131+
132+
case "Progress":
133+
refs = envoyx.MergeRefs(refs, getPageBlockProgressRefs(b, index))
134+
}
135+
}
136+
137+
return
138+
}
139+
106140
func getPageBlockRecordListRefs(b types.PageBlock, index int) (refs map[string]envoyx.Ref) {
107141
refs = make(map[string]envoyx.Ref)
108142

server/compose/envoy/yaml_encode.gen.go

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

server/compose/envoy/yaml_encode.go

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ func (e YamlEncoder) encodePageBlocksC(ctx context.Context, p envoyx.EncodeParam
9393

9494
var aux any
9595
for i, b := range pg.Blocks {
96-
aux, err = e.encodePageBlockC(ctx, p, tt, n, pg, i, b)
96+
aux, err = e.encodePageBlockC(ctx, p, tt, n, i, b)
9797
if err != nil {
9898
return
9999
}
@@ -107,7 +107,26 @@ func (e YamlEncoder) encodePageBlocksC(ctx context.Context, p envoyx.EncodeParam
107107
return out, nil
108108
}
109109

110-
func (e YamlEncoder) encodePageBlockC(ctx context.Context, p envoyx.EncodeParams, tt envoyx.Traverser, n *envoyx.Node, pg *types.Page, index int, b types.PageBlock) (_ any, err error) {
110+
func (e YamlEncoder) encodeNamespaceBlocksC(ctx context.Context, p envoyx.EncodeParams, tt envoyx.Traverser, n *envoyx.Node, pg *types.Namespace, bb types.PageBlocks) (_ any, err error) {
111+
out, _ := y7s.MakeSeq()
112+
113+
var aux any
114+
for i, b := range pg.Blocks {
115+
aux, err = e.encodePageBlockC(ctx, p, tt, n, i, b)
116+
if err != nil {
117+
return
118+
}
119+
120+
out, err = y7s.AddSeq(out, aux)
121+
if err != nil {
122+
return
123+
}
124+
}
125+
126+
return out, nil
127+
}
128+
129+
func (e YamlEncoder) encodePageBlockC(ctx context.Context, p envoyx.EncodeParams, tt envoyx.Traverser, n *envoyx.Node, index int, b types.PageBlock) (_ any, err error) {
111130

112131
switch b.Kind {
113132
case "RecordList":

server/compose/model/models.gen.go

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

server/compose/namespace.cue

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,18 @@ namespace: {
2727
omitSetter: true
2828
omitGetter: true
2929
}
30+
blocks: {
31+
goType: "types.PageBlocks"
32+
dal: { type: "JSON", defaultEmptyObject: true }
33+
omitSetter: true
34+
omitGetter: true
35+
envoy: {
36+
yaml: {
37+
customDecoder: true
38+
customEncoder: true
39+
}
40+
}
41+
}
3042
name: {
3143
sortable: true
3244
dal: {}

server/compose/rest.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,10 @@ endpoints:
109109
name: meta
110110
required: true
111111
title: Meta data
112+
- type: sqlxTypes.JSONText
113+
name: blocks
114+
required: false
115+
title: Blocks
112116
- type: map[string]string
113117
name: labels
114118
title: Labels

server/compose/rest/namespace.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,14 @@ func (ctrl Namespace) Update(ctx context.Context, r *request.NamespaceUpdate) (i
168168
return nil, err
169169
}
170170

171+
if len(r.Blocks) > 2 {
172+
// Process blocks if they were included in the request
173+
// if not, do not assume that blocks were removed!
174+
if err = r.Blocks.Unmarshal(&ns.Blocks); err != nil {
175+
return nil, err
176+
}
177+
}
178+
171179
ns, err = ctrl.namespace.Update(ctx, ns)
172180
return ctrl.makePayload(ctx, ns, err)
173181
}

server/compose/rest/request/namespace.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,11 @@ type (
134134
// Meta data
135135
Meta sqlxTypes.JSONText
136136

137+
// Blocks POST parameter
138+
//
139+
// Blocks
140+
Blocks sqlxTypes.JSONText
141+
137142
// Labels POST parameter
138143
//
139144
// Labels
@@ -569,6 +574,7 @@ func (r NamespaceUpdate) Auditable() map[string]interface{} {
569574
"slug": r.Slug,
570575
"enabled": r.Enabled,
571576
"meta": r.Meta,
577+
"blocks": r.Blocks,
572578
"labels": r.Labels,
573579
"updatedAt": r.UpdatedAt,
574580
}
@@ -599,6 +605,11 @@ func (r NamespaceUpdate) GetMeta() sqlxTypes.JSONText {
599605
return r.Meta
600606
}
601607

608+
// Auditable returns all auditable/loggable parameters
609+
func (r NamespaceUpdate) GetBlocks() sqlxTypes.JSONText {
610+
return r.Blocks
611+
}
612+
602613
// Auditable returns all auditable/loggable parameters
603614
func (r NamespaceUpdate) GetLabels() map[string]string {
604615
return r.Labels
@@ -658,6 +669,13 @@ func (r *NamespaceUpdate) Fill(req *http.Request) (err error) {
658669
}
659670
}
660671

672+
if val, ok := req.MultipartForm.Value["blocks"]; ok && len(val) > 0 {
673+
r.Blocks, err = payload.ParseJSONTextWithErr(val[0])
674+
if err != nil {
675+
return err
676+
}
677+
}
678+
661679
if val, ok := req.MultipartForm.Value["labels[]"]; ok {
662680
r.Labels, err = label.ParseStrings(val)
663681
if err != nil {
@@ -714,6 +732,13 @@ func (r *NamespaceUpdate) Fill(req *http.Request) (err error) {
714732
}
715733
}
716734

735+
if val, ok := req.Form["blocks"]; ok && len(val) > 0 {
736+
r.Blocks, err = payload.ParseJSONTextWithErr(val[0])
737+
if err != nil {
738+
return err
739+
}
740+
}
741+
717742
if val, ok := req.Form["labels[]"]; ok {
718743
r.Labels, err = label.ParseStrings(val)
719744
if err != nil {

server/compose/service/namespace.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -647,6 +647,30 @@ func (svc namespace) handleUpdate(ctx context.Context, upd *types.Namespace) nam
647647
res.Meta = upd.Meta
648648
}
649649

650+
// Get max blockID for later use
651+
blockID := uint64(0)
652+
for _, b := range res.Blocks {
653+
if b.BlockID > blockID {
654+
blockID = b.BlockID
655+
}
656+
}
657+
658+
if !reflect.DeepEqual(res.Blocks, upd.Blocks) {
659+
res.Blocks = upd.Blocks
660+
changes |= namespaceChanged
661+
}
662+
663+
// Assure blockIDs
664+
for i, b := range res.Blocks {
665+
if b.BlockID == 0 {
666+
blockID++
667+
b.BlockID = blockID
668+
res.Blocks[i] = b
669+
670+
changes |= namespaceChanged
671+
}
672+
}
673+
650674
if upd.Labels != nil {
651675
if label.Changed(res.Labels, upd.Labels) {
652676
changes |= namespaceLabelsChanged

0 commit comments

Comments
 (0)