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/common" "cloud.o-forge.io/core/oc-lib/models/utils" "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 NewAccessor(request *tools.APIRequest) *bookingMongoAccessor { return &bookingMongoAccessor{ AbstractAccessor: utils.AbstractAccessor{ Logger: logs.CreateLogger(tools.BOOKING.String()), // Create a logger with the data type Request: request, Type: tools.BOOKING, }, } } /* * 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).ExpectedEndDate) == nil { d.(*Booking).State = common.FORGOTTEN utils.GenericRawUpdateOne(d, id, a) } else if d.(*Booking).State == common.SCHEDULED && time.Now().UTC().After(*&d.(*Booking).ExpectedStartDate) { d.(*Booking).State = common.DELAYED utils.GenericRawUpdateOne(d, id, a) } return d, 200, nil }, a) } func (a *bookingMongoAccessor) LoadAll(isDraft bool) ([]utils.ShallowDBObject, int, error) { return utils.GenericLoadAll[*Booking](a.getExec(), isDraft, a) } func (a *bookingMongoAccessor) Search(filters *dbs.Filters, search string, isDraft bool) ([]utils.ShallowDBObject, int, error) { return utils.GenericSearch[*Booking](filters, search, (&Booking{}).GetObjectFilters(search), a.getExec(), isDraft, a) } func (a *bookingMongoAccessor) getExec() func(utils.DBObject) utils.ShallowDBObject { return func(d utils.DBObject) utils.ShallowDBObject { if d.(*Booking).State == common.SCHEDULED && time.Now().UTC().After(*&d.(*Booking).ExpectedStartDate) { d.(*Booking).State = common.DELAYED utils.GenericRawUpdateOne(d, d.GetID(), a) } return d } }