initial commit
This commit is contained in:
118
models/generic.go
Normal file
118
models/generic.go
Normal file
@@ -0,0 +1,118 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"cloud.o-forge.io/core/oc-catalog/models/rtype"
|
||||
"cloud.o-forge.io/core/oc-catalog/services"
|
||||
"github.com/beego/beego/v2/core/logs"
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
)
|
||||
|
||||
func getObjIDFromString(id string) interface{} {
|
||||
objectID, err := primitive.ObjectIDFromHex(id)
|
||||
if err == nil {
|
||||
return objectID
|
||||
}
|
||||
|
||||
return id
|
||||
}
|
||||
|
||||
func getMultipleObjIDFromArray(ids []string) []interface{} {
|
||||
|
||||
var ret []interface{}
|
||||
|
||||
for _, val := range ids {
|
||||
ret = append(ret, getObjIDFromString(val))
|
||||
}
|
||||
|
||||
return ret
|
||||
|
||||
}
|
||||
|
||||
func getOneResourceByID(ID string, rType rtype.Rtype) (obj interface{}, err error) {
|
||||
|
||||
targetDBCollection := rType.MongoCollection()
|
||||
var retObj interface{}
|
||||
|
||||
// asd := rType.
|
||||
switch rType {
|
||||
case rtype.DATA:
|
||||
retObj = &DataModel{}
|
||||
case rtype.COMPUTING:
|
||||
retObj = &ComputingModel{}
|
||||
case rtype.STORAGE:
|
||||
retObj = &StorageModel{}
|
||||
case rtype.DATACENTER:
|
||||
retObj = &DatacenterModel{}
|
||||
default:
|
||||
message := "Rtype " + rType.String() + " is not implemented"
|
||||
logs.Error(message)
|
||||
return nil, errors.New(message)
|
||||
}
|
||||
|
||||
filter := bson.M{"_id": getObjIDFromString(ID)}
|
||||
|
||||
res := targetDBCollection.FindOne(services.MngoCtx, filter)
|
||||
res.Decode(retObj)
|
||||
|
||||
if res.Err() != nil {
|
||||
logs.Warn("Couldn't find resource: " + res.Err().Error())
|
||||
}
|
||||
|
||||
return retObj, res.Err()
|
||||
}
|
||||
|
||||
func getMultipleResourceByIDs(IDs []string, rType rtype.Rtype) (interface{}, error) {
|
||||
|
||||
targetDBCollection := rType.MongoCollection()
|
||||
var retObj interface{}
|
||||
|
||||
// asd := rType.
|
||||
switch rType {
|
||||
case rtype.DATA:
|
||||
retObj = &[]DataModel{}
|
||||
case rtype.COMPUTING:
|
||||
retObj = &[]ComputingModel{}
|
||||
case rtype.STORAGE:
|
||||
retObj = &[]StorageModel{}
|
||||
case rtype.DATACENTER:
|
||||
retObj = &[]DatacenterModel{}
|
||||
default:
|
||||
message := "Rtype " + rType.String() + " is not implemented"
|
||||
logs.Error(message)
|
||||
return nil, errors.New(message)
|
||||
}
|
||||
|
||||
filter := bson.M{"_id": bson.M{"$in": getMultipleObjIDFromArray(IDs)}}
|
||||
|
||||
//FIXME: Limit of find
|
||||
res, err := targetDBCollection.Find(services.MngoCtx,
|
||||
filter,
|
||||
options.Find().SetLimit(100),
|
||||
)
|
||||
|
||||
if err != nil {
|
||||
logs.Warn("Couldn't find multiple data: " + err.Error())
|
||||
return nil, err
|
||||
}
|
||||
res.All(services.MngoCtx, retObj)
|
||||
|
||||
return retObj, res.Err()
|
||||
}
|
||||
|
||||
func postOneResource(retObj interface{}, rType rtype.Rtype) (ID string, err error) {
|
||||
|
||||
targetDBCollection := rType.MongoCollection()
|
||||
|
||||
result, err := targetDBCollection.InsertOne(services.MngoCtx, retObj)
|
||||
if err != nil {
|
||||
logs.Warn("Couldn't insert resource: " + err.Error())
|
||||
return "", err
|
||||
}
|
||||
|
||||
return result.InsertedID.(primitive.ObjectID).Hex(), nil
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user