From a4512e4da662541bfc059bedd2a707da9e1f4332 Mon Sep 17 00:00:00 2001 From: mr Date: Thu, 22 Jan 2026 13:38:55 +0100 Subject: [PATCH] add Groups --- models/group/group.go | 24 +++++++++ models/group/group_mongo_accessor.go | 78 ++++++++++++++++++++++++++++ models/models.go | 2 + tools/enums.go | 5 +- 4 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 models/group/group.go create mode 100644 models/group/group_mongo_accessor.go diff --git a/models/group/group.go b/models/group/group.go new file mode 100644 index 0000000..08d124a --- /dev/null +++ b/models/group/group.go @@ -0,0 +1,24 @@ +package group + +import ( + "cloud.o-forge.io/core/oc-lib/models/utils" + "cloud.o-forge.io/core/oc-lib/tools" +) + +// Group is a struct that represents a Group +type Group struct { + utils.AbstractObject +} + +func (ao *Group) VerifyAuth(callName string, request *tools.APIRequest) bool { + return true +} + +func (d *Group) GetAccessor(request *tools.APIRequest) utils.Accessor { + data := NewAccessor(request) // Create a new instance of the accessor + return data +} + +func (r *Group) CanDelete() bool { + return false // only draft order can be deleted +} diff --git a/models/group/group_mongo_accessor.go b/models/group/group_mongo_accessor.go new file mode 100644 index 0000000..56273f5 --- /dev/null +++ b/models/group/group_mongo_accessor.go @@ -0,0 +1,78 @@ +package group + +import ( + "cloud.o-forge.io/core/oc-lib/dbs" + "cloud.o-forge.io/core/oc-lib/logs" + "cloud.o-forge.io/core/oc-lib/models/utils" + "cloud.o-forge.io/core/oc-lib/tools" +) + +type groupMongoAccessor struct { + utils.AbstractAccessor // AbstractAccessor contains the basic fields of an accessor (model, caller) +} + +// New creates a new instance of the groupMongoAccessor +func NewShallowAccessor() *groupMongoAccessor { + return &groupMongoAccessor{ + AbstractAccessor: utils.AbstractAccessor{ + Logger: logs.CreateLogger(tools.GROUP.String()), // Create a logger with the data type + Type: tools.GROUP, + }, + } +} + +func NewAccessor(request *tools.APIRequest) *groupMongoAccessor { + return &groupMongoAccessor{ + AbstractAccessor: utils.AbstractAccessor{ + Logger: logs.CreateLogger(tools.GROUP.String()), // Create a logger with the data type + Request: request, + Type: tools.GROUP, + }, + } +} + +/* +* Nothing special here, just the basic CRUD operations + */ + +func (wfa *groupMongoAccessor) DeleteOne(id string) (utils.DBObject, int, error) { + return utils.GenericDeleteOne(id, wfa) +} + +func (wfa *groupMongoAccessor) UpdateOne(set utils.DBObject, id string) (utils.DBObject, int, error) { + return utils.GenericUpdateOne(set.(*Group), id, wfa, &Group{}) +} + +func (wfa *groupMongoAccessor) StoreOne(data utils.DBObject) (utils.DBObject, int, error) { + return utils.GenericStoreOne(data.(*Group), wfa) +} + +func (wfa *groupMongoAccessor) CopyOne(data utils.DBObject) (utils.DBObject, int, error) { + return utils.GenericStoreOne(data, wfa) +} + +func (dca *groupMongoAccessor) LoadOne(id string) (utils.DBObject, int, error) { + return utils.GenericLoadOne[*Group](id, func(d utils.DBObject) (utils.DBObject, int, error) { + return d, 200, nil + }, dca) +} + +func (wfa *groupMongoAccessor) LoadAll(isDraft bool) ([]utils.ShallowDBObject, int, error) { + return utils.GenericLoadAll[*Group](func(d utils.DBObject) utils.ShallowDBObject { + return d + }, isDraft, wfa) +} + +func (wfa *groupMongoAccessor) Search(filters *dbs.Filters, search string, isDraft bool) ([]utils.ShallowDBObject, int, error) { + return utils.GenericSearch[*Group](filters, search, wfa.GetDefaultFilter(search), + func(d utils.DBObject) utils.ShallowDBObject { + return d + }, isDraft, wfa) +} +func (a *groupMongoAccessor) GetDefaultFilter(search string) *dbs.Filters { + return &dbs.Filters{ + Or: map[string][]dbs.Filter{ // search by name if no filters are provided + "abstractobject.name": {{Operator: dbs.LIKE.String(), Value: search}}, + }, + } +} diff --git a/models/models.go b/models/models.go index dc40f2f..c279d2f 100644 --- a/models/models.go +++ b/models/models.go @@ -3,6 +3,7 @@ package models import ( "cloud.o-forge.io/core/oc-lib/logs" "cloud.o-forge.io/core/oc-lib/models/bill" + "cloud.o-forge.io/core/oc-lib/models/group" "cloud.o-forge.io/core/oc-lib/models/live" "cloud.o-forge.io/core/oc-lib/models/order" "cloud.o-forge.io/core/oc-lib/models/resources/purchase_resource" @@ -44,6 +45,7 @@ var ModelsCatalog = map[string]func() utils.DBObject{ tools.LIVE_DATACENTER.String(): func() utils.DBObject { return &live.LiveDatacenter{} }, tools.LIVE_STORAGE.String(): func() utils.DBObject { return &live.LiveStorage{} }, tools.BILL.String(): func() utils.DBObject { return &bill.Bill{} }, + tools.GROUP.String(): func() utils.DBObject { return &group.Group{} }, } // Model returns the model object based on the model type diff --git a/tools/enums.go b/tools/enums.go index 06a314b..e9a392c 100644 --- a/tools/enums.go +++ b/tools/enums.go @@ -14,6 +14,7 @@ const ( WORKFLOW_EXECUTION WORKSPACE PEER + GROUP COLLABORATIVE_AREA RULE BOOKING @@ -61,6 +62,7 @@ var DefaultAPI = [...]string{ NOAPI, WORKSPACEAPI, PEERSAPI, + PEERSAPI, SHAREDAPI, SHAREDAPI, DATACENTERAPI, @@ -93,6 +95,7 @@ var Str = [...]string{ "workflow_execution", "workspace", "peer", + "peer", "collaborative_area", "rule", "booking", @@ -132,7 +135,7 @@ func (d DataType) EnumIndex() int { func DataTypeList() []DataType { return []DataType{DATA_RESOURCE, PROCESSING_RESOURCE, STORAGE_RESOURCE, COMPUTE_RESOURCE, WORKFLOW_RESOURCE, - WORKFLOW, WORKFLOW_EXECUTION, WORKSPACE, PEER, COLLABORATIVE_AREA, RULE, BOOKING, WORKFLOW_HISTORY, WORKSPACE_HISTORY, + WORKFLOW, WORKFLOW_EXECUTION, WORKSPACE, PEER, GROUP, COLLABORATIVE_AREA, RULE, BOOKING, WORKFLOW_HISTORY, WORKSPACE_HISTORY, ORDER, PURCHASE_RESOURCE, ADMIRALTY_SOURCE, ADMIRALTY_TARGET, ADMIRALTY_SECRET, ADMIRALTY_KUBECONFIG, ADMIRALTY_NODES, LIVE_DATACENTER, LIVE_STORAGE, BILL, NATIVE_TOOL} }