This commit is contained in:
mr
2026-05-28 08:15:02 +02:00
parent 3be023b9af
commit 55c1b70064
7 changed files with 97 additions and 19 deletions
+2 -2
View File
@@ -82,7 +82,7 @@ func handleCreateResource(resp tools.NATSResponse) {
if bk.FromNano != "" {
access := oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.PEER), nil)
pp := access.LoadOne(bk.FromNano)
if p := pp.ToPeer(); p == nil || p.Relation == peer.NANO {
if p := pp.ToPeer(); p == nil || p.Relation != peer.NANO {
return
}
access = oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.BOOKING), nil)
@@ -107,7 +107,7 @@ func handleCreateResource(resp tools.NATSResponse) {
if pr.FromNano != "" {
access := oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.PEER), nil)
pp := access.LoadOne(pr.FromNano)
if p := pp.ToPeer(); p == nil || p.Relation == peer.NANO {
if p := pp.ToPeer(); p == nil || p.Relation != peer.NANO {
return
}
access = oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.PURCHASE_RESOURCE), nil)
+2
View File
@@ -226,6 +226,8 @@ func (ws *WorkflowSchedule) GenerateExecutions(wf *workflow.Workflow, isPreempti
SelectedPartnerships: ws.SelectedPartnerships,
SelectedBuyings: ws.SelectedBuyings,
SelectedStrategies: ws.SelectedStrategies,
SelectedPaymentMode: ws.SelectedPaymentType,
SelectedBillingStrategy: ws.SelectedBillingStrategy,
SelectedEmbeddedStorages: ws.SelectedEmbeddedStorages,
Priority: 1,
ExecutionsID: ws.UUID,
@@ -356,6 +356,25 @@ func (s *SchedulingResourcesService) HandleCreateBooking(bk *booking.Booking, ad
return !bk.IsDraft
}
// Booking destined for a known NANO — store as local proxy without planner
// check (the resource belongs to the NANO, not us). oc-discovery will
// forward to the NANO via a DTN-critical stream.
if bk.DestPeerID != "" && bk.DestPeerID != self.GetID() {
d := oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.PEER), nil).Search(&dbs.Filters{
And: map[string][]dbs.Filter{
"id": {{Operator: dbs.EQUAL.String(), Value: bk.DestPeerID}},
"relation": {{Operator: dbs.EQUAL.String(), Value: peer.NANO}},
},
}, "", false, 0, 1)
if len(d.Data) > 0 {
bk.IsDraft = true
if stored, _, err := booking.NewAccessor(adminReq).StoreOne(bk); err == nil {
time.AfterFunc(10*time.Minute, func() { DraftTimeout(stored.GetID(), tools.BOOKING) })
}
}
return false
}
// New booking
if !bk.ExpectedStartDate.IsZero() && bk.ExpectedStartDate.Before(time.Now().UTC()) {
fmt.Println("HandleCreateBooking: start date in the past, discarding")
+9 -4
View File
@@ -9,9 +9,10 @@ import (
"time"
"cloud.o-forge.io/core/oc-lib/dbs"
"cloud.o-forge.io/core/oc-lib/models/bill"
"cloud.o-forge.io/core/oc-lib/models/billing"
"cloud.o-forge.io/core/oc-lib/models/booking"
"cloud.o-forge.io/core/oc-lib/models/common/enum"
"cloud.o-forge.io/core/oc-lib/models/common/pricing"
"cloud.o-forge.io/core/oc-lib/models/order"
"cloud.o-forge.io/core/oc-lib/models/resources/purchase_resource"
"cloud.o-forge.io/core/oc-lib/models/utils"
@@ -261,6 +262,7 @@ func GenerateOrder(
ExecutionsID: executionsID,
Purchases: []*purchase_resource.PurchaseResource{},
Bookings: []*booking.Booking{},
Billing: map[pricing.BillingStrategy][]*booking.Booking{},
Status: enum.PENDING,
}
for _, purch := range purchases {
@@ -268,14 +270,17 @@ func GenerateOrder(
scheduling_resources.FromSchedulerObject(tools.PURCHASE_RESOURCE, purch).(*purchase_resource.PurchaseResource))
}
for _, b := range bookings {
newOrder.Bookings = append(newOrder.Bookings,
scheduling_resources.FromSchedulerObject(tools.BOOKING, b).(*booking.Booking))
bk := scheduling_resources.FromSchedulerObject(tools.BOOKING, b).(*booking.Booking)
newOrder.Bookings = append(newOrder.Bookings, bk)
// Groupe les bookings par stratégie de facturation pour permettre
// à DraftFirstBill de savoir quand et comment facturer chaque item.
newOrder.Billing[bk.BillingStrategy] = append(newOrder.Billing[bk.BillingStrategy], bk)
}
res, _, err := order.NewAccessor(request).StoreOne(newOrder)
if err != nil {
return "", err
}
if _, err := bill.DraftFirstBill(res.(*order.Order), request); err != nil {
if _, err := billing.DraftFirstBill(res.(*order.Order), request); err != nil {
return res.GetID(), err
}
return res.GetID(), nil