package booking import ( "time" "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/models/workflow_execution" "cloud.o-forge.io/core/oc-lib/tools" ) type bookingMongoAccessor struct { utils.AbstractAccessor // AbstractAccessor contains the basic fields of an accessor (model, caller) } // New creates a new instance of the bookingMongoAccessor func New(t tools.DataType, username string, peerID string, groups []string, caller *tools.HTTPCaller) *bookingMongoAccessor { return &bookingMongoAccessor{ AbstractAccessor: utils.AbstractAccessor{ Logger: logs.CreateLogger(t.String()), // Create a logger with the data type Caller: caller, PeerID: peerID, Groups: groups, User: username, // Set the caller Type: t, }, } } /* * Nothing special here, just the basic CRUD operations */ func (a *bookingMongoAccessor) DeleteOne(id string) (utils.DBObject, int, error) { return utils.GenericDeleteOne(id, a) } func (a *bookingMongoAccessor) UpdateOne(set utils.DBObject, id string) (utils.DBObject, int, error) { return utils.GenericUpdateOne(set, id, a, &Booking{}) } func (a *bookingMongoAccessor) StoreOne(data utils.DBObject) (utils.DBObject, int, error) { return utils.GenericStoreOne(data, a) } func (a *bookingMongoAccessor) CopyOne(data utils.DBObject) (utils.DBObject, int, error) { return utils.GenericStoreOne(data, a) } func (a *bookingMongoAccessor) LoadOne(id string) (utils.DBObject, int, error) { return utils.GenericLoadOne[*Booking](id, func(d utils.DBObject) (utils.DBObject, int, error) { if d.(*Booking).State == workflow_execution.SCHEDULED && time.Now().UTC().After(*d.(*Booking).ExecDate) { d.(*Booking).State = workflow_execution.FORGOTTEN utils.GenericRawUpdateOne(d, id, a) } return d, 200, nil }, a) } func (a *bookingMongoAccessor) LoadAll() ([]utils.ShallowDBObject, int, error) { return utils.GenericLoadAll[*Booking](a.getExec(), a) } func (a *bookingMongoAccessor) Search(filters *dbs.Filters, search string) ([]utils.ShallowDBObject, int, error) { return utils.GenericSearch[*Booking](filters, search, (&Booking{}).GetObjectFilters(search), a.getExec(), a) } func (a *bookingMongoAccessor) getExec() func(utils.DBObject) utils.ShallowDBObject { return func(d utils.DBObject) utils.ShallowDBObject { if d.(*Booking).State == workflow_execution.SCHEDULED && time.Now().UTC().After(*d.(*Booking).ExecDate) { d.(*Booking).State = workflow_execution.FORGOTTEN utils.GenericRawUpdateOne(d, d.GetID(), a) } return d } }