Update Auto Outputs on sourced.
This commit is contained in:
@@ -7,6 +7,7 @@ import (
|
|||||||
|
|
||||||
"cloud.o-forge.io/core/oc-lib/dbs"
|
"cloud.o-forge.io/core/oc-lib/dbs"
|
||||||
"cloud.o-forge.io/core/oc-lib/logs"
|
"cloud.o-forge.io/core/oc-lib/logs"
|
||||||
|
"cloud.o-forge.io/core/oc-lib/models/common/models"
|
||||||
"cloud.o-forge.io/core/oc-lib/models/live"
|
"cloud.o-forge.io/core/oc-lib/models/live"
|
||||||
"cloud.o-forge.io/core/oc-lib/models/utils"
|
"cloud.o-forge.io/core/oc-lib/models/utils"
|
||||||
"cloud.o-forge.io/core/oc-lib/tools"
|
"cloud.o-forge.io/core/oc-lib/tools"
|
||||||
@@ -16,6 +17,48 @@ type ResourceMongoAccessor[T ResourceInterface] struct {
|
|||||||
utils.AbstractAccessor[ResourceInterface] // AbstractAccessor contains the basic fields of an accessor (model, caller)
|
utils.AbstractAccessor[ResourceInterface] // AbstractAccessor contains the basic fields of an accessor (model, caller)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func sourceFromAccess(access *ResourceAccess) string {
|
||||||
|
if access == nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
if access.Container != nil && access.Container.Source != "" {
|
||||||
|
return access.Container.Source
|
||||||
|
}
|
||||||
|
if access.Source != nil && access.Source.Source != "" {
|
||||||
|
return access.Source.Source
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func upsertSourceParam(outputs []models.Param, source string) []models.Param {
|
||||||
|
for i, p := range outputs {
|
||||||
|
if p.Attr == "source" {
|
||||||
|
outputs[i].Value = source
|
||||||
|
return outputs
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return append(outputs, models.Param{Attr: "source", Value: source, Readonly: true})
|
||||||
|
}
|
||||||
|
|
||||||
|
func applyAccessSourceOutput(data utils.DBObject) {
|
||||||
|
switch r := data.(type) {
|
||||||
|
case *ProcessingResource:
|
||||||
|
for _, inst := range r.Instances {
|
||||||
|
if src := sourceFromAccess(inst.Access); src != "" {
|
||||||
|
r.Outputs = upsertSourceParam(r.Outputs, src)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case *DataResource:
|
||||||
|
for _, inst := range r.Instances {
|
||||||
|
if src := sourceFromAccess(inst.Access); src != "" {
|
||||||
|
r.Outputs = upsertSourceParam(r.Outputs, src)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// New creates a new instance of the computeMongoAccessor
|
// New creates a new instance of the computeMongoAccessor
|
||||||
func NewAccessor[T ResourceInterface](t tools.DataType, request *tools.APIRequest) *ResourceMongoAccessor[T] {
|
func NewAccessor[T ResourceInterface](t tools.DataType, request *tools.APIRequest) *ResourceMongoAccessor[T] {
|
||||||
if !slices.Contains([]tools.DataType{
|
if !slices.Contains([]tools.DataType{
|
||||||
@@ -76,6 +119,14 @@ func (dca *ResourceMongoAccessor[T]) UpdateOne(set map[string]interface{}, id st
|
|||||||
} else if dca.GetType() == tools.STORAGE_RESOURCE {
|
} else if dca.GetType() == tools.STORAGE_RESOURCE {
|
||||||
delete(set, "storage_type")
|
delete(set, "storage_type")
|
||||||
}
|
}
|
||||||
|
if dca.GetType() == tools.PROCESSING_RESOURCE || dca.GetType() == tools.DATA_RESOURCE {
|
||||||
|
if merged, _, _, err := utils.ModelGenericUpdateOne(set, id, dca); err == nil {
|
||||||
|
applyAccessSourceOutput(merged)
|
||||||
|
if serialized := merged.Serialize(merged); serialized != nil {
|
||||||
|
set["outputs"] = serialized["outputs"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return utils.GenericUpdateOne(set, id, dca)
|
return utils.GenericUpdateOne(set, id, dca)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -134,6 +185,7 @@ func (dca *ResourceMongoAccessor[T]) StoreOne(data utils.DBObject) (utils.DBObje
|
|||||||
i = res.GetID()
|
i = res.GetID()
|
||||||
idsToUpdate = res.(*live.LiveStorage).ResourcesID
|
idsToUpdate = res.(*live.LiveStorage).ResourcesID
|
||||||
}
|
}
|
||||||
|
applyAccessSourceOutput(data)
|
||||||
res, code, err := utils.GenericStoreOne(data, dca)
|
res, code, err := utils.GenericStoreOne(data, dca)
|
||||||
if res != nil && i != "" {
|
if res != nil && i != "" {
|
||||||
idsToUpdate = append(idsToUpdate, res.GetID())
|
idsToUpdate = append(idsToUpdate, res.GetID())
|
||||||
|
|||||||
Reference in New Issue
Block a user