3
0

Rework compose record resource

* Decoder, resource,
* when reading from yaml, we'll just read it all at once.
This commit is contained in:
Tomaž Jerman 2020-11-04 18:57:12 +01:00
parent 3c3ba8a9e4
commit 1007ee6176
3 changed files with 58 additions and 49 deletions

View File

@ -0,0 +1,46 @@
package resource
import (
"fmt"
"github.com/cortezaproject/corteza-server/compose/types"
)
const (
COMPOSE_RECORD_RESOURCE_TYPE = "ComposeRecordSet"
)
type (
ComposeRecord struct {
*base
Res *types.Record
nsRef string
modRef string
userRef map[string]string
}
)
func NewComposeRecord(res *types.Record, nsRef, modRef string, userRef map[string]string) *ComposeRecord {
r := &ComposeRecord{base: &base{}}
r.SetResourceType(COMPOSE_RECORD_RESOURCE_TYPE)
r.Res = res
r.nsRef = nsRef
r.modRef = modRef
r.AddIdentifier(identifiers(res.ID)...)
r.AddRef(COMPOSE_NAMESPACE_RESOURCE_TYPE, nsRef)
r.AddRef(COMPOSE_MODULE_RESOURCE_TYPE, modRef)
return r
}
func (m *ComposeRecord) SearchQuery() types.RecordFilter {
f := types.RecordFilter{}
if m.Res.ID > 0 {
f.Query = fmt.Sprintf("recordID=%d", m.Res.ID)
}
return f
}

View File

@ -1,27 +0,0 @@
package resource
import (
"github.com/cortezaproject/corteza-server/compose/types"
)
const (
COMPOSE_RECORD_SET_RESOURCE_TYPE = "ComposeRecordSet"
)
type (
ComposeRecordSet struct {
*base
Walk Walker
}
Walker func(r *types.Record) error
)
// @todo add record provider
func NewComposeRecordSet() *ComposeRecordSet {
r := &ComposeRecordSet{base: &base{}}
r.SetResourceType(COMPOSE_RECORD_SET_RESOURCE_TYPE)
return r
}

View File

@ -11,15 +11,12 @@ import (
type (
composeRecord struct {
res *types.Record `yaml:",inline"`
res *types.Record `yaml:",inline"`
refModule string
refNamespace string
refCreatedBy string
refUpdatedBy string
refDeletedBy string
refOwnedBy string
rbac rbacRuleSet
// createdBy, updatedBy, deletedBy, ownedBy
refUser map[string]string
}
composeRecordSet []*composeRecord
@ -104,22 +101,15 @@ func (wset composeRecordSet) setNamespaceRef(ref string) error {
}
func (wrap composeRecord) MarshalEnvoy() ([]resource.Interface, error) {
var refUsers = []string{}
for _, u := range []string{wrap.refCreatedBy, wrap.refUpdatedBy, wrap.refDeletedBy, wrap.refOwnedBy} {
if len(u) > 0 {
// emails and handles
refUsers = append(refUsers, u)
}
}
return envoy.CollectNodes(
// @todo...
resource.NewComposeRecordSet(),
wrap.rbac,
resource.NewComposeRecord(wrap.res, wrap.refNamespace, wrap.refModule, wrap.refUser),
)
}
func (wrap *composeRecord) UnmarshalYAML(n *yaml.Node) (err error) {
if wrap.refUser == nil {
wrap.refUser = make(map[string]string)
}
if wrap.res == nil {
wrap.res = &types.Record{}
}
@ -151,13 +141,13 @@ func (wrap *composeRecord) UnmarshalYAML(n *yaml.Node) (err error) {
case "deletedAt":
return v.Decode(&wrap.res.DeletedAt)
case "createdBy":
return decodeRef(v, "createdBy user", &wrap.refCreatedBy)
return v.Decode(wrap.refUser["createdBy"])
case "updatedBy":
return decodeRef(v, "updatedBy user", &wrap.refUpdatedBy)
return v.Decode(wrap.refUser["updatedBy"])
case "deletedBy":
return decodeRef(v, "deletedBy user", &wrap.refDeletedBy)
return v.Decode(wrap.refUser["deletedBy"])
case "ownedBy":
return decodeRef(v, "ownedBy user", &wrap.refOwnedBy)
return v.Decode(wrap.refUser["ownedBy"])
}