2024-07-18 14:11:13 +02:00
|
|
|
package oclib
|
|
|
|
|
|
|
|
import (
|
2024-08-01 09:13:10 +02:00
|
|
|
"cloud.o-forge.io/core/oc-lib/dbs"
|
2024-07-18 14:11:13 +02:00
|
|
|
"cloud.o-forge.io/core/oc-lib/dbs/mongo"
|
2024-07-18 17:55:27 +02:00
|
|
|
"cloud.o-forge.io/core/oc-lib/logs"
|
2024-07-18 14:11:13 +02:00
|
|
|
"cloud.o-forge.io/core/oc-lib/models"
|
2024-07-30 14:41:33 +02:00
|
|
|
"cloud.o-forge.io/core/oc-lib/models/resource_model"
|
2024-07-29 08:52:02 +02:00
|
|
|
"cloud.o-forge.io/core/oc-lib/models/resources/data"
|
|
|
|
"cloud.o-forge.io/core/oc-lib/models/resources/datacenter"
|
|
|
|
"cloud.o-forge.io/core/oc-lib/models/resources/processing"
|
|
|
|
"cloud.o-forge.io/core/oc-lib/models/resources/storage"
|
|
|
|
w "cloud.o-forge.io/core/oc-lib/models/resources/workflow"
|
2024-07-18 15:35:30 +02:00
|
|
|
"cloud.o-forge.io/core/oc-lib/models/utils"
|
2024-07-29 08:52:02 +02:00
|
|
|
w2 "cloud.o-forge.io/core/oc-lib/models/workflow"
|
|
|
|
"cloud.o-forge.io/core/oc-lib/models/workflow_execution"
|
|
|
|
"cloud.o-forge.io/core/oc-lib/models/workspace"
|
2024-07-18 18:14:12 +02:00
|
|
|
"github.com/rs/zerolog"
|
2024-07-18 14:39:54 +02:00
|
|
|
)
|
|
|
|
|
2024-08-01 09:13:10 +02:00
|
|
|
type Filters = dbs.Filters
|
|
|
|
|
2024-07-18 15:35:30 +02:00
|
|
|
type LibDataEnum int
|
2024-07-18 15:15:01 +02:00
|
|
|
|
2024-07-18 15:02:39 +02:00
|
|
|
const (
|
2024-07-22 10:11:28 +02:00
|
|
|
INVALID LibDataEnum = iota
|
2024-07-22 09:39:42 +02:00
|
|
|
DATA_RESOURCE = utils.DATA_RESOURCE
|
|
|
|
PROCESSING_RESOURCE = utils.PROCESSING_RESOURCE
|
|
|
|
STORAGE_RESOURCE = utils.STORAGE_RESOURCE
|
|
|
|
DATACENTER_RESOURCE = utils.DATACENTER_RESOURCE
|
|
|
|
WORKFLOW_RESOURCE = utils.WORKFLOW_RESOURCE
|
2024-07-22 10:11:28 +02:00
|
|
|
WORKFLOW = utils.WORKFLOW
|
2024-07-25 09:28:55 +02:00
|
|
|
WORKSPACE = utils.WORKSPACE
|
2024-08-02 17:00:29 +02:00
|
|
|
WORKFLOW_EXECUTION = utils.WORKFLOW_EXECUTION
|
2024-07-18 15:02:39 +02:00
|
|
|
)
|
2024-07-18 14:39:54 +02:00
|
|
|
|
2024-07-26 14:15:55 +02:00
|
|
|
func (d LibDataEnum) String() string {
|
|
|
|
return utils.Str[d]
|
|
|
|
}
|
|
|
|
|
2024-07-18 15:35:30 +02:00
|
|
|
func (d LibDataEnum) EnumIndex() int {
|
2024-07-18 15:15:01 +02:00
|
|
|
return int(d)
|
|
|
|
}
|
|
|
|
|
2024-07-23 11:22:50 +02:00
|
|
|
type LibDataShallow struct {
|
|
|
|
Data []utils.ShallowDBObject `bson:"data" json:"data"`
|
|
|
|
Code int `bson:"code" json:"code"`
|
|
|
|
Err string `bson:"error" json:"error"`
|
|
|
|
}
|
|
|
|
|
2024-07-18 15:35:30 +02:00
|
|
|
type LibData struct {
|
2024-07-22 09:03:57 +02:00
|
|
|
Data utils.DBObject `bson:"data" json:"data"`
|
2024-07-22 10:11:28 +02:00
|
|
|
Code int `bson:"code" json:"code"`
|
|
|
|
Err string `bson:"error" json:"error"`
|
2024-07-18 15:35:30 +02:00
|
|
|
}
|
|
|
|
|
2024-07-18 17:55:27 +02:00
|
|
|
func Init(appName string) {
|
|
|
|
logs.SetAppName(appName)
|
|
|
|
logs.SetLogger(logs.CreateLogger("main", ""))
|
2024-07-18 14:11:13 +02:00
|
|
|
mongo.MONGOService.Init(models.GetModelsNames(), GetConfig())
|
2024-07-30 14:41:33 +02:00
|
|
|
accessor := (&resource_model.ResourceModel{}).GetAccessor()
|
|
|
|
for _, model := range []string{utils.DATA_RESOURCE.String(), utils.PROCESSING_RESOURCE.String(), utils.STORAGE_RESOURCE.String(), utils.DATACENTER_RESOURCE.String(), utils.WORKFLOW_RESOURCE.String()} {
|
2024-08-01 09:13:10 +02:00
|
|
|
data, code, _ := accessor.Search(nil, model)
|
2024-07-30 14:41:33 +02:00
|
|
|
if code == 404 || len(data) == 0 {
|
|
|
|
m := map[string]resource_model.Model{}
|
|
|
|
if model == utils.PROCESSING_RESOURCE.String() {
|
|
|
|
m["image"] = resource_model.Model{
|
|
|
|
Type: "string",
|
|
|
|
ReadOnly: false,
|
|
|
|
}
|
|
|
|
m["command"] = resource_model.Model{
|
|
|
|
Type: "string",
|
|
|
|
ReadOnly: false,
|
|
|
|
}
|
|
|
|
m["args"] = resource_model.Model{
|
|
|
|
Type: "string",
|
|
|
|
ReadOnly: false,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
accessor.StoreOne(&resource_model.ResourceModel{
|
|
|
|
ResourceType: model,
|
|
|
|
Model: m,
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
2024-07-18 14:11:13 +02:00
|
|
|
}
|
|
|
|
|
2024-07-18 18:14:12 +02:00
|
|
|
func GetLogger() zerolog.Logger {
|
2024-07-19 09:32:58 +02:00
|
|
|
return logs.GetLogger()
|
2024-07-18 17:59:25 +02:00
|
|
|
}
|
|
|
|
|
2024-08-01 09:13:10 +02:00
|
|
|
func Search(filters *dbs.Filters, word string, collection LibDataEnum) LibDataShallow {
|
|
|
|
d, code, err := models.Model(collection.EnumIndex()).GetAccessor().Search(filters, word)
|
2024-07-26 13:45:10 +02:00
|
|
|
if err != nil {
|
|
|
|
return LibDataShallow{Data: d, Code: code, Err: err.Error()}
|
|
|
|
}
|
|
|
|
return LibDataShallow{Data: d, Code: code}
|
|
|
|
}
|
|
|
|
|
2024-07-23 11:22:50 +02:00
|
|
|
func LoadAll(collection LibDataEnum) LibDataShallow {
|
|
|
|
d, code, err := models.Model(collection.EnumIndex()).GetAccessor().LoadAll()
|
|
|
|
if err != nil {
|
|
|
|
return LibDataShallow{Data: d, Code: code, Err: err.Error()}
|
|
|
|
}
|
|
|
|
return LibDataShallow{Data: d, Code: code}
|
|
|
|
}
|
|
|
|
|
2024-07-18 17:55:27 +02:00
|
|
|
func LoadOne(collection LibDataEnum, id string) LibData {
|
2024-07-22 09:16:59 +02:00
|
|
|
d, code, err := models.Model(collection.EnumIndex()).GetAccessor().LoadOne(id)
|
2024-07-22 15:18:59 +02:00
|
|
|
if err != nil {
|
|
|
|
return LibData{Data: d, Code: code, Err: err.Error()}
|
|
|
|
}
|
|
|
|
return LibData{Data: d, Code: code}
|
2024-07-18 14:39:54 +02:00
|
|
|
}
|
|
|
|
|
2024-07-18 17:55:27 +02:00
|
|
|
func UpdateOne(collection LibDataEnum, set map[string]interface{}, id string) LibData {
|
2024-07-22 15:18:59 +02:00
|
|
|
model := models.Model(collection.EnumIndex())
|
2024-07-22 16:12:38 +02:00
|
|
|
d, code, err := model.GetAccessor().UpdateOne(model.Deserialize(set), id)
|
2024-07-22 15:18:59 +02:00
|
|
|
if err != nil {
|
|
|
|
return LibData{Data: d, Code: code, Err: err.Error()}
|
|
|
|
}
|
|
|
|
return LibData{Data: d, Code: code}
|
2024-07-18 14:39:54 +02:00
|
|
|
}
|
|
|
|
|
2024-07-18 17:55:27 +02:00
|
|
|
func DeleteOne(collection LibDataEnum, id string) LibData {
|
2024-07-22 09:16:59 +02:00
|
|
|
d, code, err := models.Model(collection.EnumIndex()).GetAccessor().DeleteOne(id)
|
2024-07-22 15:18:59 +02:00
|
|
|
if err != nil {
|
|
|
|
return LibData{Data: d, Code: code, Err: err.Error()}
|
|
|
|
}
|
|
|
|
return LibData{Data: d, Code: code}
|
2024-07-19 13:41:10 +02:00
|
|
|
}
|
|
|
|
|
2024-07-18 17:55:27 +02:00
|
|
|
func StoreOne(collection LibDataEnum, object map[string]interface{}) LibData {
|
|
|
|
model := models.Model(collection.EnumIndex())
|
2024-07-22 09:16:59 +02:00
|
|
|
d, code, err := model.GetAccessor().StoreOne(model.Deserialize(object))
|
2024-07-22 15:18:59 +02:00
|
|
|
if err != nil {
|
|
|
|
return LibData{Data: d, Code: code, Err: err.Error()}
|
|
|
|
}
|
|
|
|
return LibData{Data: d, Code: code}
|
2024-07-18 14:11:13 +02:00
|
|
|
}
|
2024-07-22 09:16:59 +02:00
|
|
|
|
|
|
|
func CopyOne(collection LibDataEnum, object map[string]interface{}) LibData {
|
|
|
|
model := models.Model(collection.EnumIndex())
|
|
|
|
d, code, err := model.GetAccessor().CopyOne(model.Deserialize(object))
|
2024-07-22 15:18:59 +02:00
|
|
|
if err != nil {
|
|
|
|
return LibData{Data: d, Code: code, Err: err.Error()}
|
|
|
|
}
|
|
|
|
return LibData{Data: d, Code: code}
|
2024-07-22 10:11:28 +02:00
|
|
|
}
|
2024-07-29 08:52:02 +02:00
|
|
|
|
|
|
|
// ================ CAST ========================= //
|
|
|
|
|
|
|
|
func (l *LibData) ToDataResource() *data.DataResource {
|
|
|
|
if l.Data.GetAccessor().GetType() == utils.DATA_RESOURCE.String() {
|
|
|
|
return l.Data.(*data.DataResource)
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (l *LibData) ToDatacenterResource() *datacenter.DatacenterResource {
|
|
|
|
if l.Data != nil && l.Data.GetAccessor().GetType() == utils.DATACENTER_RESOURCE.String() {
|
|
|
|
return l.Data.(*datacenter.DatacenterResource)
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
func (l *LibData) ToStorageResource() *storage.StorageResource {
|
|
|
|
if l.Data.GetAccessor().GetType() == utils.STORAGE_RESOURCE.String() {
|
|
|
|
return l.Data.(*storage.StorageResource)
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
func (l *LibData) ToProcessingResource() *processing.ProcessingResource {
|
|
|
|
if l.Data.GetAccessor().GetType() == utils.PROCESSING_RESOURCE.String() {
|
|
|
|
return l.Data.(*processing.ProcessingResource)
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
func (l *LibData) ToWorkflowResource() *w.WorkflowResource {
|
|
|
|
if l.Data.GetAccessor().GetType() == utils.WORKFLOW_RESOURCE.String() {
|
|
|
|
return l.Data.(*w.WorkflowResource)
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (l *LibData) ToWorkflow() *w2.Workflow {
|
|
|
|
if l.Data.GetAccessor().GetType() == utils.WORKFLOW.String() {
|
|
|
|
return l.Data.(*w2.Workflow)
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
func (l *LibData) ToWorkspace() *workspace.Workspace {
|
|
|
|
if l.Data.GetAccessor().GetType() == utils.WORKSPACE.String() {
|
|
|
|
return l.Data.(*workspace.Workspace)
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
func (l *LibData) ToWorkflowExecution() *workflow_execution.WorkflowExecution {
|
|
|
|
if l.Data.GetAccessor().GetType() == utils.WORKSPACE.String() {
|
|
|
|
return l.Data.(*workflow_execution.WorkflowExecution)
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|